From d53ae335e0af492ab92d61f5f9efadda646f2cb7 Mon Sep 17 00:00:00 2001 From: Hans van Kranenburg Date: Sun, 8 Jul 2018 13:30:32 +0100 Subject: [PATCH] Import xen_4.11.1~pre+1.733450b39b-1~exp1.debian.tar.xz [dgit import tarball xen 4.11.1~pre+1.733450b39b-1~exp1 xen_4.11.1~pre+1.733450b39b-1~exp1.debian.tar.xz] --- README.md | 7 + README.source.md | 100 ++ arch/amd64/defines | 10 + arch/arm64/defines | 11 + arch/armhf/defines | 10 + arch/defines | 10 + arch/i386/defines | 11 + bin/check-patches.sh | 13 + bin/gencontrol.py | 125 ++ bin/genorig.py | 93 + changelog | 1500 +++++++++++++++++ compat | 1 + control | 167 ++ control.md5sum | 17 + copyright | 307 ++++ lib/python/debian_linux/__init__.py | 1 + lib/python/debian_linux/abi.py | 42 + lib/python/debian_linux/config.py | 260 +++ lib/python/debian_linux/debian.py | 468 +++++ lib/python/debian_linux/firmware.py | 89 + lib/python/debian_linux/gencontrol.py | 355 ++++ lib/python/debian_linux/kconfig.py | 91 + lib/python/debian_linux/patches.py | 180 ++ lib/python/debian_linux/utils.py | 93 + lib/python/debian_xen/__init__.py | 0 lib/python/debian_xen/debian.py | 52 + libxen-dev.install | 46 + libxenstore3.0.install | 2 + libxenstore3.0.symbols | 53 + patches/misc/tools-include-install.diff | 26 + ...tools-pygrub-remove-static-solaris-support | 82 + patches/misc/tools-xenmon-install.diff | 21 + ...p-replace-use-of-deprecated-vwprintw.patch | 35 + ...stestsx86_emulator-pass--no-pie--fno.patch | 47 + patches/misc/version.diff | 147 ++ patches/prefix-abiname/config-prefix.diff | 29 + .../prefix-abiname/tools-blktap2-prefix.diff | 171 ++ .../prefix-abiname/tools-console-prefix.diff | 35 + .../tools-libfsimage-abiname.diff | 62 + .../tools-libfsimage-prefix.diff | 55 + .../prefix-abiname/tools-libxc-abiname.diff | 122 ++ .../prefix-abiname/tools-libxl-abiname.diff | 119 ++ .../prefix-abiname/tools-libxl-prefix.diff | 51 + patches/prefix-abiname/tools-misc-prefix.diff | 33 + .../prefix-abiname/tools-pygrub-prefix.diff | 49 + .../prefix-abiname/tools-python-prefix.diff | 32 + patches/prefix-abiname/tools-rpath.diff | 19 + .../prefix-abiname/tools-xcutils-rpath.diff | 19 + .../prefix-abiname/tools-xenmon-prefix.diff | 42 + .../tools-xenpaging-prefix.diff | 19 + .../prefix-abiname/tools-xenpmd-prefix.diff | 30 + .../prefix-abiname/tools-xenstat-abiname.diff | 79 + .../prefix-abiname/tools-xenstat-prefix.diff | 70 + .../prefix-abiname/tools-xenstore-prefix.diff | 68 + .../tools-xentoolcore-abiname.patch | 52 + .../prefix-abiname/tools-xentrace-prefix.diff | 46 + .../ubuntu-tools-libs-abiname.diff | 308 ++++ patches/series | 39 + patches/xenstore/tools-fake-xs-restrict.patch | 37 + .../tools-xenstore-compatibility.diff | 52 + pycompat | 1 + rules | 90 + rules.defs | 3 + rules.gen | 128 ++ rules.real | 286 ++++ scripts/Makefile | 52 + scripts/qemu-ifup | 13 + scripts/xen | 6 + scripts/xen-dir | 10 + scripts/xen-init-list | 73 + scripts/xen-init-name | 61 + scripts/xen-toolstack | 42 + scripts/xen-toolstack-wrapper | 11 + scripts/xen-utils-wrapper | 6 + scripts/xen-version | 22 + source/format | 1 + templates/control.hypervisor.in | 15 + templates/control.main.in | 72 + templates/control.source.in | 28 + templates/control.system.latest.in | 8 + templates/control.utils.in | 12 + templates/libxen.bug/control | 1 + templates/xen-hypervisor.bug/control | 1 + templates/xen-hypervisor.postinst.in | 23 + templates/xen-hypervisor.postrm.in | 23 + templates/xen-utils.bug/control | 1 + templates/xen-utils.lintian-overrides.in | 1 + templates/xen-utils.postinst.in | 24 + templates/xen-utils.prerm.in | 24 + .../etc/default/grub.d/xen.cfg | 54 + tree/xen-utils-common/etc/xen/xend-config.sxp | 306 ++++ .../etc/xen/xend-pci-permissive.sxp | 27 + .../etc/xen/xend-pci-quirks.sxp | 96 ++ .../usr/share/xen-utils-common/default.xen | 9 + xen-hypervisor-4.11-amd64.postinst | 23 + xen-hypervisor-4.11-amd64.postrm | 23 + xen-hypervisor-4.11-arm64.postinst | 23 + xen-hypervisor-4.11-arm64.postrm | 23 + xen-hypervisor-4.11-armhf.postinst | 23 + xen-hypervisor-4.11-armhf.postrm | 23 + xen-hypervisor-common.install | 1 + xen-utils-4.11.lintian-overrides | 1 + xen-utils-4.11.postinst | 24 + xen-utils-4.11.prerm | 24 + xen-utils-common.README.Debian | 29 + xen-utils-common.dirs | 1 + xen-utils-common.examples | 2 + xen-utils-common.install | 5 + xen-utils-common.postinst | 23 + xen-utils-common.postrm | 23 + xen-utils-common.preinst | 23 + xen-utils-common.ucf | 1 + xen-utils-common.xen.init | 378 +++++ xen-utils-common.xend.default | 2 + xen-utils-common.xendomains.default | 60 + xen-utils-common.xendomains.init | 228 +++ xen-utils.NEWS | 8 + xen-utils.README.Debian | 53 + xenstore-utils.install | 1 + 119 files changed, 8665 insertions(+) create mode 100644 README.md create mode 100644 README.source.md create mode 100644 arch/amd64/defines create mode 100644 arch/arm64/defines create mode 100644 arch/armhf/defines create mode 100644 arch/defines create mode 100644 arch/i386/defines create mode 100755 bin/check-patches.sh create mode 100755 bin/gencontrol.py create mode 100755 bin/genorig.py create mode 100644 changelog create mode 100644 compat create mode 100644 control create mode 100644 control.md5sum create mode 100644 copyright create mode 100644 lib/python/debian_linux/__init__.py create mode 100644 lib/python/debian_linux/abi.py create mode 100644 lib/python/debian_linux/config.py create mode 100644 lib/python/debian_linux/debian.py create mode 100644 lib/python/debian_linux/firmware.py create mode 100644 lib/python/debian_linux/gencontrol.py create mode 100644 lib/python/debian_linux/kconfig.py create mode 100644 lib/python/debian_linux/patches.py create mode 100644 lib/python/debian_linux/utils.py create mode 100644 lib/python/debian_xen/__init__.py create mode 100644 lib/python/debian_xen/debian.py create mode 100644 libxen-dev.install create mode 100644 libxenstore3.0.install create mode 100644 libxenstore3.0.symbols create mode 100644 patches/misc/tools-include-install.diff create mode 100644 patches/misc/tools-pygrub-remove-static-solaris-support create mode 100644 patches/misc/tools-xenmon-install.diff create mode 100644 patches/misc/tools-xentop-replace-use-of-deprecated-vwprintw.patch create mode 100644 patches/misc/toolstestsx86_emulator-pass--no-pie--fno.patch create mode 100644 patches/misc/version.diff create mode 100644 patches/prefix-abiname/config-prefix.diff create mode 100644 patches/prefix-abiname/tools-blktap2-prefix.diff create mode 100644 patches/prefix-abiname/tools-console-prefix.diff create mode 100644 patches/prefix-abiname/tools-libfsimage-abiname.diff create mode 100644 patches/prefix-abiname/tools-libfsimage-prefix.diff create mode 100644 patches/prefix-abiname/tools-libxc-abiname.diff create mode 100644 patches/prefix-abiname/tools-libxl-abiname.diff create mode 100644 patches/prefix-abiname/tools-libxl-prefix.diff create mode 100644 patches/prefix-abiname/tools-misc-prefix.diff create mode 100644 patches/prefix-abiname/tools-pygrub-prefix.diff create mode 100644 patches/prefix-abiname/tools-python-prefix.diff create mode 100644 patches/prefix-abiname/tools-rpath.diff create mode 100644 patches/prefix-abiname/tools-xcutils-rpath.diff create mode 100644 patches/prefix-abiname/tools-xenmon-prefix.diff create mode 100644 patches/prefix-abiname/tools-xenpaging-prefix.diff create mode 100644 patches/prefix-abiname/tools-xenpmd-prefix.diff create mode 100644 patches/prefix-abiname/tools-xenstat-abiname.diff create mode 100644 patches/prefix-abiname/tools-xenstat-prefix.diff create mode 100644 patches/prefix-abiname/tools-xenstore-prefix.diff create mode 100644 patches/prefix-abiname/tools-xentoolcore-abiname.patch create mode 100644 patches/prefix-abiname/tools-xentrace-prefix.diff create mode 100644 patches/prefix-abiname/ubuntu-tools-libs-abiname.diff create mode 100644 patches/series create mode 100644 patches/xenstore/tools-fake-xs-restrict.patch create mode 100644 patches/xenstore/tools-xenstore-compatibility.diff create mode 100644 pycompat create mode 100755 rules create mode 100644 rules.defs create mode 100644 rules.gen create mode 100644 rules.real create mode 100644 scripts/Makefile create mode 100644 scripts/qemu-ifup create mode 100755 scripts/xen create mode 100755 scripts/xen-dir create mode 100755 scripts/xen-init-list create mode 100755 scripts/xen-init-name create mode 100755 scripts/xen-toolstack create mode 100755 scripts/xen-toolstack-wrapper create mode 100755 scripts/xen-utils-wrapper create mode 100755 scripts/xen-version create mode 100644 source/format create mode 100644 templates/control.hypervisor.in create mode 100644 templates/control.main.in create mode 100644 templates/control.source.in create mode 100644 templates/control.system.latest.in create mode 100644 templates/control.utils.in create mode 100644 templates/libxen.bug/control create mode 100644 templates/xen-hypervisor.bug/control create mode 100644 templates/xen-hypervisor.postinst.in create mode 100644 templates/xen-hypervisor.postrm.in create mode 100644 templates/xen-utils.bug/control create mode 100644 templates/xen-utils.lintian-overrides.in create mode 100644 templates/xen-utils.postinst.in create mode 100644 templates/xen-utils.prerm.in create mode 100644 tree/xen-hypervisor-common/etc/default/grub.d/xen.cfg create mode 100644 tree/xen-utils-common/etc/xen/xend-config.sxp create mode 100644 tree/xen-utils-common/etc/xen/xend-pci-permissive.sxp create mode 100644 tree/xen-utils-common/etc/xen/xend-pci-quirks.sxp create mode 100644 tree/xen-utils-common/usr/share/xen-utils-common/default.xen create mode 100644 xen-hypervisor-4.11-amd64.postinst create mode 100644 xen-hypervisor-4.11-amd64.postrm create mode 100644 xen-hypervisor-4.11-arm64.postinst create mode 100644 xen-hypervisor-4.11-arm64.postrm create mode 100644 xen-hypervisor-4.11-armhf.postinst create mode 100644 xen-hypervisor-4.11-armhf.postrm create mode 100644 xen-hypervisor-common.install create mode 100644 xen-utils-4.11.lintian-overrides create mode 100644 xen-utils-4.11.postinst create mode 100644 xen-utils-4.11.prerm create mode 100644 xen-utils-common.README.Debian create mode 100644 xen-utils-common.dirs create mode 100644 xen-utils-common.examples create mode 100644 xen-utils-common.install create mode 100644 xen-utils-common.postinst create mode 100644 xen-utils-common.postrm create mode 100644 xen-utils-common.preinst create mode 100644 xen-utils-common.ucf create mode 100644 xen-utils-common.xen.init create mode 100644 xen-utils-common.xend.default create mode 100644 xen-utils-common.xendomains.default create mode 100644 xen-utils-common.xendomains.init create mode 100644 xen-utils.NEWS create mode 100644 xen-utils.README.Debian create mode 100644 xenstore-utils.install diff --git a/README.md b/README.md new file mode 100644 index 0000000000..c153df5bba --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +Xen packaging for Debian +======================== + +For building the Xen packages, [see README.source](README.source.md) + +For general information about the Debian Xen Team, [see the +wiki](https://salsa.debian.org/xen-team/debian-xen/wikis/home). diff --git a/README.source.md b/README.source.md new file mode 100644 index 0000000000..c1d52d52a8 --- /dev/null +++ b/README.source.md @@ -0,0 +1,100 @@ +Xen packaging for Debian +======================== + +Step 1: Get the upstream source +------------------------------- + +The upstream Xen source code is not included with the packaging code +repository. + +When doing additional work on a new debian revision of an existing package for +a specific upstream version, grab the orig tar that's already in the package +archives and put it just outside the directory of this repository. + +To package a new upstream version, an orig tar can be generated by pointing the +genorig.py progam to your local xen git repository. + +Clone the upstream git repository somewhere (not inside the packaging +directory, somewhere else!): + + -$ git clone https://xenbits.xen.org/git-http/xen.git + +After cloning it, we should generate an orig tar from the upstream source. + +Based on the version number in the newest debian/changelog entry, a release tag +or specific commit can be used to generate the orig tar file. For example, if +the latest entry in changelog is 4.10.0-1, then this will build the orig tar +from the RELEASE-4.10.0 tag in upstream git: + + -$ debian/bin/genorig.py /path/to/xen.git + Generate tarball ../orig/xen_4.10.0.orig.tar.xz + +| **Recognized patterns** | example | uses treeish | +|--------|------|------| +| Regular release | 4.10.2 | RELEASE-4.10.2 | +| Pre version in between stable releases with explicit commit | 4.10.2~pre+1.25e0657e00-1 | 25e0657e00 | +| Explicit commit while in rc | 4.11.0~rc6+1.35fcb982ea-1~exp1 | 35fcb982ea | +| Release candidate | 4.11.0~rc7-1~exp1 | 4.11.0-rc7 | + +When a version contains an explicit commit hash, it has to be 10 characters long. Since commit ids do not sort, the +1 serves that purpose, and is incremented to +2 etc when switching to another commit. + +Step 2: Combine the upstream source and packaging +------------------------------------------------- + +The orig target in debian/rules is our friendly helper here: + + -$ debian/rules orig + mkdir -p ../orig + tar -C ../orig -xaf ../xen_4.10.0.orig.tar.xz + rsync --delete --exclude /debian --exclude .git -a ../orig/xen-4.10.0/ . + QUILT_PATCHES='[...]/debian/patches' QUILT_PC=.pc quilt push --quiltrc - -a -q --fuzz=0 + Applying patch version.diff + Applying patch config-prefix.diff + [...] + Applying patch tools-xentoolcore-abiname.patch + Now at patch tools-xentoolcore-abiname.patch + +Step 3: Generate missing packaging files +---------------------------------------- + +Quite some files in the packaging are generated. At least all the files which +have version-dependent names etc. + +To generate them: + + -$ debian/rules debian/control + /usr/bin/make -f debian/rules debian/control-real + make[1]: Entering directory '[...]' + debian/bin/gencontrol.py + md5sum debian/changelog [...] > debian/control.md5sum + + This target is made to fail intentionally, to make sure + that it is NEVER run during the automated build. Please + ignore the following error, the debian/control file has + been generated SUCCESSFULLY. + + exit 1 + debian/rules:79: recipe for target 'debian/control-real' failed + make[1]: *** [debian/control-real] Error 1 + make[1]: Leaving directory '[...]' + debian/rules:69: recipe for target 'debian/control' failed + make: *** [debian/control] Error 2 + +This looks a bit wonky, but it makes sure we're not able to do the actual +package build without having taken this step. + +Step 4: Build the package +------------------------- + +Use your favourite way to build the package. Mine is pbuilder, so I'm doing +something like + + -$ pdebuild --use-pdebuild-internal \ + --auto-debsign --debsign-k ABCDEF \ + --configfile /home/knorrie/.pbuilderrc-sid + +Step 5: Cleanup and reset everything +------------------------------------ + +To cleanup the whole packaging environment, just do a git clean -dfx, and +you're ready to continue back at step 2. diff --git a/arch/amd64/defines b/arch/amd64/defines new file mode 100644 index 0000000000..8585798cda --- /dev/null +++ b/arch/amd64/defines @@ -0,0 +1,10 @@ +[base] +flavours: + amd64 +xen-arch: x86_64 +image-suffix: .gz + +[amd64_description] +hardware: AMD64 +hardware-long: all 64bit single- and multiprocessor AMD and Intel + diff --git a/arch/arm64/defines b/arch/arm64/defines new file mode 100644 index 0000000000..b181444668 --- /dev/null +++ b/arch/arm64/defines @@ -0,0 +1,11 @@ +[base] +flavours: + arm64 +xen-arch: arm64 +image-suffix: +with-ocaml: no + +[arm64_description] +hardware: ARM64 +hardware-long: all 64bit ARMv8 + diff --git a/arch/armhf/defines b/arch/armhf/defines new file mode 100644 index 0000000000..ee6918e2ed --- /dev/null +++ b/arch/armhf/defines @@ -0,0 +1,10 @@ +[base] +flavours: + armhf +xen-arch: arm32 +image-suffix: + +[armhf_description] +hardware: ARMHF +hardware-long: all 32bit ARMv7 with virtualisation extensions + diff --git a/arch/defines b/arch/defines new file mode 100644 index 0000000000..2c8073fcb5 --- /dev/null +++ b/arch/defines @@ -0,0 +1,10 @@ +[abi] + +[base] +arches: + amd64 + arm64 + armhf + i386 +featuresets: + none diff --git a/arch/i386/defines b/arch/i386/defines new file mode 100644 index 0000000000..40b0588f0c --- /dev/null +++ b/arch/i386/defines @@ -0,0 +1,11 @@ +[base] +flavours: + amd64 +xen-arch: x86_32 + +[amd64_base] +xen-arch: x86_64 + +[amd64_description] +hardware: AMD64 +hardware-long: all 64bit single- and multiprocessor AMD and Intel diff --git a/bin/check-patches.sh b/bin/check-patches.sh new file mode 100755 index 0000000000..8de7c5e7eb --- /dev/null +++ b/bin/check-patches.sh @@ -0,0 +1,13 @@ +#!/bin/sh -e + +TMPDIR=$(mktemp -d) +trap "rm -rf $TMPDIR" EXIT +grep -v "^#" debian/patches/series | awk '{if (NF == 1) print "debian/patches/" $1}' | sort -u > $TMPDIR/used +find debian/patches -type f -name "*.diff" -printf "%p\n" | sort > $TMPDIR/avail +echo "Used patches" +echo "==============" +cat $TMPDIR/used +echo +echo "Unused patches" +echo "==============" +fgrep -v -f $TMPDIR/used $TMPDIR/avail diff --git a/bin/gencontrol.py b/bin/gencontrol.py new file mode 100755 index 0000000000..2a801c0da2 --- /dev/null +++ b/bin/gencontrol.py @@ -0,0 +1,125 @@ +#!/usr/bin/env python3 + +import os, sys +sys.path.append(os.path.join(sys.path[0], "../lib/python")) + +from debian_xen.debian import VersionXen +from debian_linux.config import ConfigCoreHierarchy +from debian_linux.debian import Changelog, PackageArchitecture +from debian_linux.gencontrol import Gencontrol as Base +from debian_linux.utils import Templates + +class Gencontrol(Base): + config_schema = { + 'description': { + } + } + + def __init__(self): + super(Gencontrol, self).__init__(ConfigCoreHierarchy(self.config_schema, ["debian/arch"]), Templates(["debian/templates"])) + self.process_changelog() + + def do_main_setup(self, vars, makeflags, extra): + makeflags.update({ + 'VERSION': self.version.xen_version, + }) + + def do_arch_setup(self, vars, makeflags, arch, extra): + config_entry = self.config.merge('base', arch) + config_entry_description = self.config.merge('description', arch) + + for i in ( + ('xen-arch', 'XEN_ARCH'), + ): + makeflags[i[1]] = config_entry[i[0]] + + def do_arch_packages(self, packages, makefile, arch, vars, makeflags, extra): + packages_main = self.process_packages(self.templates["control.main"], vars) + packages_utils = self.process_packages(self.templates["control.utils"], vars) + + for package in packages_main + packages_utils: + name = package['Package'] + if name in packages: + package = packages.get(name) + else: + packages.append(package) + + arches = package.setdefault('Architecture', PackageArchitecture()) + if 'all' not in arches: + arches.add(arch) + + package_utils_name = packages_utils[0]['Package'] + + for i in ('postinst', 'prerm', 'lintian-overrides'): + j = self.substitute(self.templates["xen-utils.%s" % i], vars) + open("debian/%s.%s" % (package_utils_name, i), 'w').write(j) + + cmds_binary_arch = ["$(MAKE) -f debian/rules.real binary-arch-arch %s" % makeflags] + cmds_build = ["$(MAKE) -f debian/rules.real build-arch-arch %s" % makeflags] + cmds_setup = ["$(MAKE) -f debian/rules.real setup-arch %s" % makeflags] + makefile.add('binary-arch_%s_real' % arch, cmds = cmds_binary_arch) + makefile.add('build-arch_%s_real' % arch, cmds = cmds_build) + makefile.add('setup_%s_real' % arch, cmds = cmds_setup) + + def do_flavour_setup(self, vars, makeflags, arch, featureset, flavour, extra): + config_entry = self.config.merge('base', arch, featureset, flavour) + config_description = self.config.merge('description', arch, featureset, flavour) + + vars['class'] = config_description['hardware'] + vars['longclass'] = config_description.get('hardware-long') or vars['class'] + + for i in ( + ('xen-arch', 'XEN_ARCH'), + ('image-suffix', 'IMAGE_SUFFIX'), + ): + if i[0] in config_entry: + makeflags[i[1]] = config_entry[i[0]] + + def do_flavour_packages(self, packages, makefile, arch, featureset, flavour, vars, makeflags, extra): + hypervisor = self.templates["control.hypervisor"] + system_latest = self.templates["control.system.latest"] + + if not 'desc' in vars: + vars['desc'] = '' + + packages_own = [] + packages_own.extend(self.process_packages(hypervisor, vars)) + packages_dummy = self.process_packages(system_latest, vars) + + for package in packages_own + packages_dummy: + name = package['Package'] + package.setdefault('Architecture', PackageArchitecture()).add(arch) + if name in packages: + package = packages.get(name) + else: + packages.append(package) + + arches = package.setdefault('Architecture', PackageArchitecture()) + if 'all' not in arches: + arches.add(arch) + + package_name = packages_own[0]['Package'] + + for i in ('postinst', 'postrm'): + j = self.substitute(self.templates["xen-hypervisor.%s" % i], vars) + open("debian/%s.%s" % (package_name, i), 'w').write(j) + + cmds_binary_arch = ["$(MAKE) -f debian/rules.real binary-arch-flavour %s" % makeflags] + cmds_build = ["$(MAKE) -f debian/rules.real build-arch-flavour %s" % makeflags] + cmds_setup = ["$(MAKE) -f debian/rules.real setup-flavour %s" % makeflags] + + cmds_binary_arch += ["$(MAKE) -f debian/rules.real install-dummy DH_OPTIONS='%s' %s" % (u' '.join([u"-p%s" % i['Package'] for i in packages_dummy]), makeflags)] + + makefile.add("binary-arch_%s_%s_%s" % (arch, featureset, flavour), cmds = cmds_binary_arch) + makefile.add("build-arch_%s_%s_%s" % (arch, featureset, flavour), cmds = cmds_build) + makefile.add("setup_%s_%s_%s" % (arch, featureset, flavour), cmds = cmds_setup) + + def process_changelog(self): + changelog = Changelog(version = VersionXen) + self.version = changelog[0].version + self.vars = { + 'version': self.version.xen_version, + } + +if __name__ == '__main__': + Gencontrol()() diff --git a/bin/genorig.py b/bin/genorig.py new file mode 100755 index 0000000000..1d3c5a158b --- /dev/null +++ b/bin/genorig.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 + +import sys +sys.path.append(sys.path[0] + '/../lib/python') + +import itertools +import os, os.path +import shutil +import subprocess + +from debian_xen.debian import VersionXen +from debian_linux.debian import Changelog + + +class Main(object): + log = sys.stdout.write + + def __init__(self, options, repo): + self.options = options + self.repo = repo + + self.changelog_entry = Changelog(version=VersionXen)[0] + self.source = self.changelog_entry.source + self.version = self.changelog_entry.version + + if options.override_version: + self.version = VersionXen('%s-0' % options.override_version) + + if options.component: + self.orig_dir = options.component + self.orig_tar = '%s_%s.orig-%s.tar.xz' % (self.source, self.version.upstream, options.component) + else: + self.orig_dir = '%s-%s' % (self.source, self.version.upstream) + self.orig_tar = '%s_%s.orig.tar.xz' % (self.source, self.version.upstream) + + def __call__(self): + out = "../orig/%s" % self.orig_tar + + if self.options.tag: + treeish = self.options.tag + else: + treeish = self.changelog_entry.version.treeish + + self.log("Generate tarball %s from treeish %s\n" % (out, treeish)) + + try: + os.stat(out) + raise RuntimeError("Destination already exists") + except OSError: pass + + try: + os.mkdir("../orig") + except OSError: + pass + + ga_exists = os.path.exists('.gitattributes') + try: + if ga_exists: + os.rename('.gitattributes','.gitattributes.genorig-saved') + with open('.gitattributes', 'w') as ga: + print('* -export-subst\n', file=ga) + with open(out, 'wb') as f: + _cmd = ('git', 'archive', '--worktree-attributes', '--prefix', '%s/' % self.orig_dir, treeish) + p1 = subprocess.Popen(_cmd, stdout=subprocess.PIPE, cwd=self.repo) + subprocess.check_call(('xz', ), stdin=p1.stdout, stdout=f) + if p1.wait(): + raise RuntimeError + except: + os.unlink(out) + raise + + try: + if ga_exists: + os.rename('.gitattributes.genorig-saved','.gitattributes') + else: + os.unlink('.gitattributes') + except Exception: pass + + try: + os.link(os.path.join('..', 'orig', self.orig_tar), os.path.join('..', self.orig_tar)) + except OSError: + pass + + +if __name__ == '__main__': + from optparse import OptionParser + p = OptionParser(prog=sys.argv[0], usage='%prog [OPTION]... DIR') + p.add_option('-c', '--component', dest='component') + p.add_option('-t', '--tag', dest='tag') + p.add_option('-V', '--override-version', dest='override_version') + options, args = p.parse_args() + assert(len(args) == 1) + Main(options, *args)() diff --git a/changelog b/changelog new file mode 100644 index 0000000000..7d3facff71 --- /dev/null +++ b/changelog @@ -0,0 +1,1500 @@ +xen (4.11.1~pre+1.733450b39b-1~exp1) experimental; urgency=medium + + [ Hans van Kranenburg ] + * Update to 4.11.1-pre commit 733450b39b, which also contains: + - Additional fix for: Unlimited recursion in linear pagetable de-typing + XSA-240 CVE-2017-15595 (listed as xsa240-4.8/0004) + - Fix x86 PV guests may gain access to internally used pages + XSA-248 CVE-2017-17566 + - Fix broken x86 shadow mode refcount overflow check + XSA-249 CVE-2017-17563 + - Fix improper x86 shadow mode refcount error handling + XSA-250 CVE-2017-17564 + - Fix improper bug check in x86 log-dirty handling + XSA-251 CVE-2017-17565 + - Fix: DoS via non-preemptable L3/L4 pagetable freeing + XSA-252 CVE-2018-7540 + - Fix x86: memory leak with MSR emulation + XSA-253 CVE-2018-5244 + - Multiple parts of fixes for... + Information leak via side effects of speculative execution + XSA-254 CVE-2017-5753 CVE-2017-5715 CVE-2017-5754 + - XPTI stage 1 a.k.a. 'Meltdown band-aid', XPTI-S1 or XPTI-lite + - Branch predictor hardening for ARM CPUs + - Support compiling with indirect branch thunks (e.g. retpoline) + - Report details of speculative mitigations in boot logging + - Fix: grant table v2 -> v1 transition may crash Xen + XSA-255 CVE-2018-7541 + - Fix: x86 PVH guest without LAPIC may DoS the host + XSA-256 CVE-2018-7542 + - The "Comet" shim, which can be used as a mitigation for Meltdown to + shield the hypervisor against 64-bit PV guests. + - Fix: Information leak via crafted user-supplied CDROM + XSA-258 CVE-2018-10472 + - Fix: x86: PV guest may crash Xen with XPTI + XSA-259 CVE-2018-10471 + - Fix: x86: mishandling of debug exceptions + XSA-260 CVE-2018-8897 + - Fix: x86 vHPET interrupt injection errors + XSA-261 CVE-2018-10982 + - Fix: qemu may drive Xen into unbounded loop + XSA-262 CVE-2018-10981 + - Fix: Speculative Store Bypass + XSA-263 CVE-2018-3639 + - Fix: preemption checks bypassed in x86 PV MM handling + XSA-264 CVE-2018-12891 + - Fix: x86: #DB exception safety check can be triggered by a guest + XSA-265 CVE-2018-12893 + - Fix: libxl fails to honour readonly flag on HVM emulated SCSI disks + XSA-266 CVE-2018-12892 + - Fix: Speculative register leakage from lazy FPU context switching + XSA-267 CVE-2018-3665 + - Fix: Use of v2 grant tables may cause crash on ARM + XSA-268 CVE-2018-15469 + - Fix: x86: Incorrect MSR_DEBUGCTL handling lets guests enable BTS + XSA-269 CVE-2018-15468 + - Fix: oxenstored does not apply quota-maxentity + XSA-272 CVE-2018-15470 + - Fix: L1 Terminal Fault speculative side channel + XSA-273 CVE-2018-3620 + * Merge changes for 4.9 from the ubuntu packaging (thanks, Stefan Bader): + - Rebase patches against upstream source (line numbers etc). + - debian/rules.real: + - Add a call to build common tool headers. + - Add a call to install common tool headers. + - debian/libxen-dev.install, d/p/ubuntu-tools-libs-abiname.diff: + - Add additional modifications for new libxendevicemodel. + - debian/patches/tools-fake-xs-restrict.patch: + - Re-introduce (fake) xs_restrict call to keep libxenstore version at + 3.0 for now. + - debian/libxenstore3.0.symbols: add xs_control_command + * Rebase patches against 4.10 upstream source. + * Rebase patches against 4.11 upstream source. + * Add README.source.md to document how the packaging works. + * This package builds correctly with gcc 7. (Closes: #853710) + * Fix grub config file conflict when upgrading from Stretch. (Closes: #852545) + * Init scripts: Do not kill per-domain qemu processes. (Closes: #879751) + * debian/patches: Fix "'vwprintw' is deprecated" gcc 8 compilation error + + [ Mark Pryor ] + * Fix shared library build dependencies for the new xentoolcore library. + + [ John Keates ] + * Enable OVMF (Closes: #858962) + + -- Hans van Kranenburg Sun, 08 Jul 2018 14:30:32 +0200 + +xen (4.8.2+xsa245-0+deb9u1) stretch-security; urgency=high + + * Update to upstream stable 4.8 branch, which is currently at Xen 4.8.2 + plus a number of bugfixes and security fixes. + Result is that we now include security fixes for: + XSA-231 CVE-2017-14316 + XSA-232 CVE-2017-14318 + XSA-233 CVE-2017-14317 + XSA-234 CVE-2017-14319 + (235 already included in 4.8.1-1+deb9u3) + XSA-236 CVE-2017-15597 + XSA-237 CVE-2017-15590 + XSA-238 (no CVE yet) + XSA-239 CVE-2017-15589 + XSA-240 CVE-2017-15595 + XSA-241 CVE-2017-15588 + XSA-242 CVE-2017-15593 + XSA-243 CVE-2017-15592 + XSA-244 CVE-2017-15594 + XSA-245 (no CVE yet) + and a number of upstream functionality fixes, which are not easily + disentangled from the security fixes. + * Apply two more security fixes: + XSA-246 (no CVE yet) + XSA-247 (no CVE yet) + + -- Ian Jackson Sat, 25 Nov 2017 11:26:37 +0000 + +xen (4.8.1-1+deb9u3) stretch-security; urgency=high + + * Security fixes for + XSA-226 CVE-2017-12135 + XSA-227 CVE-2017-12137 + XSA-228 CVE-2017-12136 + XSA-230 CVE-2017-12855 + XSA-235 (no CVE yet) + * Adjust changelog entry for 4.8.1-1+deb9u2 to record + that XSA-225 fix was indeed included. + * Security fix for XSA-229 not included as that bug is in Linux, not Xen. + * Security fixes for XSA-231..234 inc. not inclued as still embargoed. + + -- Ian Jackson Thu, 07 Sep 2017 19:17:58 +0100 + +xen (4.8.1-1+deb9u2) stretch-security; urgency=high + + * Security fixes for + XSA-216 XSA-217 XSA-218 XSA-219 XSA-220 + XSA-221 XSA-222 XSA-223 XSA-224 XSA-225 + + -- Ian Jackson Tue, 20 Jun 2017 14:06:34 +0100 + +xen (4.8.1-1+deb9u1) unstable; urgency=medium + + * Security fixes for XSA-213 (Closes:#861659) and XSA-214 + (Closes:#861660). (Xen 4.7 and later is not affected by XSA-215.) + + -- Ian Jackson Tue, 02 May 2017 12:19:57 +0100 + +xen (4.8.1-1) unstable; urgency=high + + * Update to upstream 4.8.1 release. + Changes include numerous bugfixes, including security fixes for: + XSA-212 / CVE-2017-7228 Closes:#859560 + XSA-207 / no cve yet Closes:#856229 + XSA-206 / no cve yet no Debian bug + + -- Ian Jackson Tue, 18 Apr 2017 18:05:00 +0100 + +xen (4.8.1~pre.2017.01.23-1) unstable; urgency=medium + + * Update to current upstream stable-4.8 git branch (Xen 4.8.1-pre). + Contains bugfixes. + * debian/control-real etc.: debian.py: Allow version numbers like this. + + -- Ian Jackson Mon, 23 Jan 2017 16:03:31 +0000 + +xen (4.8.0-1) unstable; urgency=high + + * Update to upstream Xen 4.8.0. + Includes the following security fixes: + XSA-201 CVE-2016-9815 CVE-2016-9816 CVE-2016-9817 CVE-2016-9818 + XSA-198 CVE-2016-9379 CVE-2016-9380 + XSA-196 CVE-2016-9378 CVE-2016-9377 Closes:#845669 + XSA-195 CVE-2016-9383 + XSA-194 CVE-2016-9384 Closes:#845667 + XSA-193 CVE-2016-9385 + XSA-192 CVE-2016-9382 + XSA-191 CVE-2016-9386 + Includes other bugfixes too: + Closes:#812166, Closes:#818525. + + Cherry picks from upstream: + * Security fixes: + XSA-204 CVE-2016-10013 Closes:#848713 + XSA-203 CVE-2016-10025 + XSA-202 CVE-2016-10024 + For completeness, the following XSAs do not apply here: + XSA-197 CVE-2016-9381 Bug is in qemu + XSA-199 CVE-2016-9637 Bug is in qemu + XSA-200 CVE-2016-9932 Xen 4.8 is not affected + * Cherry pick a build failure fix: + "x86/emul: add likely()/unlikely() to test harness" + + [ Ian Jackson ] + * Drop -lcrypto search from upstream configure, and from our + Build-Depends. Closes:#844419. + * Change my own email address to my work (Citrix) address. When + uploading, I will swap hats to effectively sponsor my own upload. + + [ Ian Campbell ] + * Start a qemu process in dom0 to service the toolstacks loopback disk + attaches. (Closes: #770456) + * Remove correct pidfile when stopping xenconsoled. + * Check that xenstored has actually started before talking to it. + Incorporate a timeout so as not to block boot (Mitigates #737613) + * Correct syntax error in xen-init-list when running with xend + (Closes: #763102) + * Apply SELinux labels to directories created by initscripts. Patch from + Russell Coker. (Closes: #764912) + * Include a reportbug control file to redirect bugs to src:xen for + packages which contain the Xen version in the name. Closes:#796370. + + [ Lubomir Host ] + * Fix xen-init-name to not fail looking for a nonexistent 'config' + entry in xl's JSON output. Closes:#818129. + + -- Ian Jackson Thu, 22 Dec 2016 14:51:46 +0000 + +xen (4.8.0~rc5-1) unstable; urgency=medium + + * New upstream version, Xen 4.8.0 RC5. + + -- Ian Jackson Fri, 11 Nov 2016 15:26:58 +0000 + +xen (4.8.0~rc3-1) unstable; urgency=medium + + * Upload 4.8.0~rc3 to unstable. (RC5 is out upstream, but let's not + update to that in the middle of the Xen 4.6 -> 4.8 transition.) + * No source changes. + + -- Ian Jackson Sat, 05 Nov 2016 15:08:47 +0000 + +xen (4.8.0~rc3-0exp2) experimental; urgency=medium + + * Build-Depend on iasl on all architectures. ARM has ACPI now. + Fixes FTBFS on arm64 (at least). + * Add qemu-utils and seabios to Suggests. + * Pass -no-pie -fno-pic to x86 emulator test build. (Patch + also submitted upstream.) Fixes FTBFS on i386 with GCC6. + * Add myself to Uploaders. + + -- Ian Jackson Tue, 01 Nov 2016 18:00:25 +0000 + +xen (4.8.0~rc3-0exp1) experimental; urgency=high + + * New upstream version, Xen 4.8.0 RC3. + Fixes many outstanding CVEs. + * Incorporated many changes from 4.8.0-0ubuntu2 + - libxen-dev is M-A: same + - Work around grep bug http://bugs.launchpad.net/bugs/1547466 + - debian/xen-hypervisor-4.6.xen.cfg: + Additional config file to simplify grub configuration. + - Use new library/abiname scheme. + - Document what xl and xm are in default.xen + - Add libvirtd dependency to xendomains init script + (Thanks to Stefan Bader and others.) + + -- Ian Jackson Mon, 24 Oct 2016 17:31:27 +0100 + +xen (4.6.0-1+nmu2) unstable; urgency=medium + + * Ensure debian/control.md5sum is correctly updated. Fixes FTBFS of + 4.6.0-1+nmu1 on buildds where linux-support-4.2.0-1 is not expected to be + installed. + + -- Ian Campbell Tue, 09 Feb 2016 16:41:16 +0000 + +xen (4.6.0-1+nmu1) unstable; urgency=medium + + * Non-maintainer upload. + * Drop unused patching in of $(PREFIX), $(SBINDIR) and $(BINDIR) + which are no longer used by the upstream build system. + * Use correct/consistent LIBEXEC dirs throughout build + (Closes: #805508). + + -- Ian Campbell Tue, 19 Jan 2016 14:43:54 +0000 + +xen (4.6.0-1) unstable; urgency=medium + + * New upstream release. + * CVE-2015-7812 + * CVE-2015-7813 + * CVE-2015-7814 + * CVE-2015-7835 + * CVE-2015-7969 + * CVE-2015-7970 + * CVE-2015-7971 + * CVE-2015-7972 + + -- Bastian Blank Sun, 01 Nov 2015 21:49:07 +0100 + +xen (4.5.1~rc1-1) experimental; urgency=medium + + [ Ian Campbell ] + * Use xen-init-dom0 from initscript when it is available. + * Install some user facing docs in xen-utils-common. (Closes: #688308) + + [ Bastian Blank ] + * New upstream release candidate. + + -- Bastian Blank Sun, 31 May 2015 21:59:56 +0200 + +xen (4.5.0-1) experimental; urgency=medium + + [ Ian Campbell ] + * New upstream release + + -- Bastian Blank Wed, 21 Jan 2015 20:21:45 +0100 + +xen (4.5.0~rc3-1) experimental; urgency=medium + + * New upstream release candidate. + * Re-add xend config. + + -- Bastian Blank Wed, 17 Dec 2014 22:37:23 +0100 + +xen (4.4.1-6) unstable; urgency=medium + + * Fix starvation of writers in locks. + CVE-2014-9065 + + -- Bastian Blank Thu, 11 Dec 2014 15:56:08 +0100 + +xen (4.4.1-5) unstable; urgency=medium + + * Fix excessive checks of hypercall arguments. + CVE-2014-8866 + * Fix boundary checks of emulated MMIO access. + CVE-2014-8867 + * Fix additional memory leaks in xl. (closes: #767295) + + -- Bastian Blank Sun, 30 Nov 2014 20:13:32 +0100 + +xen (4.4.1-4) unstable; urgency=medium + + [ Bastian Blank ] + * Make operations pre-emptible. + CVE-2014-5146, CVE-2014-5149 + * Don't allow page table updates from non-PV page tables. + CVE-2014-8594 + * Enforce privilege level while loading code segment. + CVE-2014-8595 + * Fix reference counter leak. + CVE-2014-9030 + * Use linux 3.16.0-4 stuff. + * Fix memory leak in xl. (closes: #767295) + + [ Ian Campbell ] + * Add licensing for tools/python/logging to debian/copyright. + (Closes: #759384) + * Correctly include xen-init-name in xen-utils-common. (Closes: #769543) + * xen-utils recommends grub-xen-host package (Closes: #770460) + + -- Bastian Blank Thu, 27 Nov 2014 20:17:36 +0100 + +xen (4.4.1-3) unstable; urgency=medium + + [ Bastian Blank ] + * Remove unused build-depencencies. + * Extend list affected systems for broken interrupt assignment. + CVE-2013-3495 + * Fix race in hvm memory management. + CVE-2014-7154 + * Fix missing privilege checks on instruction emulation. + CVE-2014-7155, CVE-2014-7156 + * Fix uninitialized control structures in FIFO handling. + CVE-2014-6268 + * Fix MSR range check in emulation. + CVE-2014-7188 + + [ Ian Campbell ] + * Install xen.efi into /boot for amd64 builds. + + -- Bastian Blank Fri, 17 Oct 2014 16:27:46 +0200 + +xen (4.4.1-2) unstable; urgency=medium + + * Re-build with correct content. + * Use dh_lintian. + + -- Bastian Blank Wed, 24 Sep 2014 20:23:14 +0200 + +xen (4.4.1-1) unstable; urgency=medium + + * New upstream release. + - Fix several vulnerabilities. (closes: #757724) + CVE-2014-2599, CVE-2014-3124, + CVE-2014-3967, CVE-2014-3968, + CVE-2014-4021 + + -- Bastian Blank Sun, 21 Sep 2014 10:45:47 +0200 + +xen (4.4.0-5) unstable; urgency=medium + + [ Ian Campbell ] + * Expand on the descriptions of some packages. (Closes: #466683) + * Clarify where xen-utils-common is required. (Closes: #612403) + * No longer depend on gawk. Xen can now use any awk one of which is always + present. (Closes: #589176) + * Put core dumps in /var/lib/xen/dump and ensure it exists. + (Closes: #444000) + + [ Bastian Blank ] + * Handle JSON output from xl in xendomains init script. + + -- Bastian Blank Sat, 06 Sep 2014 22:11:20 +0200 + +xen (4.4.0-4) unstable; urgency=medium + + [ Bastian Blank ] + * Also remove unused OCaml packages from control file. + * Make library packages multi-arch: same. (closes: #730417) + * Use debhelper compat level 9. (closes: #692352) + + [ Ian Campbell ] + * Correct contents of /etc/xen/scripts/hotplugpath.sh (Closes: #706283) + * Drop references cpuperf-xen and cpuperf-perfcntr. (Closes: #733847) + * Install xentrace_format(1), xentrace(8) and xentop(1). (Closes: #407143) + + -- Bastian Blank Sat, 30 Aug 2014 13:34:04 +0200 + +xen (4.4.0-3) unstable; urgency=medium + + [ Ian Campbell ] + * Use correct SeaBIOS binary which supports Xen (Closes: #737905). + + [ Bastian Blank ] + * Really update config.{sub,guess}. + + -- Bastian Blank Fri, 29 Aug 2014 16:33:19 +0200 + +xen (4.4.0-2) unstable; urgency=medium + + * Remove broken and unused OCaml-support. + + -- Bastian Blank Mon, 18 Aug 2014 15:18:42 +0200 + +xen (4.4.0-1) unstable; urgency=medium + + [ Bastian Blank ] + * New upstream release. + - Update scripts for compatiblity with latest coreutils. + (closes: #718898) + - Fix guest reboot with xl toolstack. (closes: #727100) + - CVE-2013-6375: Insufficient TLB flushing in VT-d (iommu) code. + (closes: #730254) + - xl support for global VNC options. (closes: #744157) + - vif scripts can now be named relative to /etc/xen/scripts. + (closes: #744160) + - Support for arbitrary sized SeaBIOS binaries. (closes: #737905) + - pygrub searches for extlinux.conf in the expected places. + (closes: #697407) + - Update scripts to use correct syntax for ip command. + (closes: #705659) + * Fix install of xend configs to not break compatibility. + + [ Ian Campbell ] + * Disable blktap1 support using new configure option instead of by patching. + * Disable qemu-traditional and rombios support using new configure option + instead of by patching. No need to build-depend on ipxe any more. + * Use system qemu-xen via new configure option instead of patching. + * Use system seabios via new configure option instead of patching. + * Use EXTRA_CFLAGS_XEN_TOOLS and APPEND_{CPPFLAGS,LDFLAGS} during build. + * Add support for armhf and arm64. + * Update config.{sub,guess}. + + -- Bastian Blank Sat, 09 Aug 2014 13:09:00 +0200 + +xen (4.3.0-3) unstable; urgency=low + + * Revive hypervisor on i386. + + -- Bastian Blank Fri, 18 Oct 2013 00:15:16 +0200 + +xen (4.3.0-2) unstable; urgency=low + + * Force proper install order. (closes: #721999) + + -- Bastian Blank Sat, 05 Oct 2013 15:03:36 +0000 + +xen (4.3.0-1) unstable; urgency=low + + * New upstream release. + - Fix HVM PCI passthrough. (closes: #706543) + * Call configure with proper arguments. + * Remove now empty xen-docs package. + * Disable external code retrieval. + * Drop all i386 hypervisor packages. + * Drop complete blktap support. + * Create /run/xen. + * Make xen-utils recommend qemu-system-x86. (closes: #688311) + - This version comes with audio support. (closes: #635166) + * Make libxenlight and libxlutil public. (closes: #644390) + - Set versioned ABI name. + - Install headers. + - Move libs into normal library path. + * Use build flags in the tools build. + - Fix fallout from harderning flags. + * Update Standards-Version to 3.9.4. No changes. + + -- Bastian Blank Thu, 05 Sep 2013 13:54:03 +0200 + +xen (4.2.2-1) unstable; urgency=low + + * New upstream release. + - Fix build with gcc 4.8. (closes: #712376) + * Build-depend on libssl-dev. (closes: #712366) + * Enable hardening as much as possible. + * Re-enable ocaml build fixes. (closes: #695176) + * Check for out-of-bound values in CPU affinity setup. + CVE-2013-2072 + * Fix information leak on AMD CPUs. + CVE-2013-2076 + * Recover from faults on XRSTOR. + CVE-2013-2077 + * Properly check guest input to XSETBV. + CVE-2013-2078 + + -- Bastian Blank Thu, 11 Jul 2013 00:28:24 +0200 + +xen (4.2.1-2) unstable; urgency=low + + * Actually upload to unstable. + + -- Bastian Blank Sun, 12 May 2013 00:20:58 +0200 + +xen (4.2.1-1) experimental; urgency=low + + * New upstream release. + * Enable usage of seabios. + * Fix some toolchain issues. + + -- Bastian Blank Sat, 11 May 2013 23:55:46 +0200 + +xen (4.2.0-2) experimental; urgency=low + + * Support JSON output in domain init script helper. + + -- Bastian Blank Mon, 01 Oct 2012 15:11:30 +0200 + +xen (4.2.0-1) experimental; urgency=low + + * New upstream release. + + -- Bastian Blank Tue, 18 Sep 2012 13:54:30 +0200 + +xen (4.2.0~rc3-1) experimental; urgency=low + + * New upstream snapshot. + + -- Bastian Blank Fri, 07 Sep 2012 20:28:46 +0200 + +xen (4.2.0~rc2-1) experimental; urgency=low + + * New upstream snapshot. + * Build-depend against libglib2.0-dev and libyajl-dev. + * Disable seabios build for now. + * Remove support for Lenny and earlier. + * Support build-arch and build-indep make targets. + + -- Bastian Blank Sun, 13 May 2012 12:21:10 +0000 + +xen (4.1.4-4) unstable; urgency=high + + * Make several long runing operations preemptible. + CVE-2013-1918 + * Fix source validation for VT-d interrupt remapping. + CVE-2013-1952 + + -- Bastian Blank Thu, 02 May 2013 14:30:29 +0200 + +xen (4.1.4-3) unstable; urgency=high + + * Fix return from SYSENTER. + CVE-2013-1917 + * Fix various problems with guest interrupt handling. + CVE-2013-1919 + * Only save pointer after access checks. + CVE-2013-1920 + * Fix domain locking for transitive grants. + CVE-2013-1964 + + -- Bastian Blank Fri, 19 Apr 2013 13:01:57 +0200 + +xen (4.1.4-2) unstable; urgency=low + + * Use pre-device interrupt remapping mode per default. Fix removing old + remappings. + CVE-2013-0153 + + -- Bastian Blank Wed, 06 Feb 2013 13:04:52 +0100 + +xen (4.1.4-1) unstable; urgency=low + + * New upstream release. + - Disable process-context identifier support in newer CPUs for all + domains. + - Add workarounds for AMD errata. + - Don't allow any non-canonical addresses. + - Use Multiboot memory map if BIOS emulation does not provide one. + - Fix several problems in tmem. + CVE-2012-3497 + - Fix error handling in domain creation. + - Adjust locking and interrupt handling during S3 resume. + - Tighten more resource and memory range checks. + - Reset performance counters. (closes: #698651) + - Remove special-case for first IO-APIC. + - Fix MSI handling for HVM domains. (closes: #695123) + - Revert cache value of disks in HVM domains. + + -- Bastian Blank Thu, 31 Jan 2013 15:44:50 +0100 + +xen (4.1.3-8) unstable; urgency=high + + * Fix error in VT-d interrupt remapping source validation. + CVE-2012-5634 + * Fix buffer overflow in qemu e1000 emulation. + CVE-2012-6075 + * Update patch, mention second CVE. + CVE-2012-5511, CVE-2012-6333 + + -- Bastian Blank Sat, 19 Jan 2013 13:55:07 +0100 + +xen (4.1.3-7) unstable; urgency=low + + * Fix clock jump due to incorrect annotated inline assembler. + (closes: #599161) + * Add support for XZ compressed Linux kernels to hypervisor and userspace + based loaders, it is needed for any Linux kernels newer then Wheezy. + (closes: #695056) + + -- Bastian Blank Tue, 11 Dec 2012 18:54:59 +0100 + +xen (4.1.3-6) unstable; urgency=high + + * Fix error handling in physical to machine memory mapping. + CVE-2012-5514 + + -- Bastian Blank Tue, 04 Dec 2012 10:51:43 +0100 + +xen (4.1.3-5) unstable; urgency=high + + * Fix state corruption due to incomplete grant table switch. + CVE-2012-5510 + * Check range of arguments to several HVM operations. + CVE-2012-5511, CVE-2012-6333 + * Check array index before using it in HVM memory operation. + CVE-2012-5512 + * Check memory range in memory exchange operation. + CVE-2012-5513 + * Don't allow too large memory size and avoid busy looping. + CVE-2012-5515 + + -- Bastian Blank Mon, 03 Dec 2012 19:37:38 +0100 + +xen (4.1.3-4) unstable; urgency=high + + * Use linux 3.2.0-4 stuff. + * Fix overflow in timer calculations. + CVE-2012-4535 + * Check value of physical interrupts parameter before using it. + CVE-2012-4536 + * Error out on incorrect memory mapping updates. + CVE-2012-4537 + * Check if toplevel page tables are present. + CVE-2012-4538 + * Fix infinite loop in compatibility code. + CVE-2012-4539 + * Limit maximum kernel and ramdisk size. + CVE-2012-2625, CVE-2012-4544 + + -- Bastian Blank Tue, 20 Nov 2012 15:51:01 +0100 + +xen (4.1.3-3) unstable; urgency=low + + * Xen domain init script: + - Make sure Open vSwitch is started before any domain. + - Properly handle and show output of failed migration and save. + - Ask all domains to shut down before checking them. + + -- Bastian Blank Tue, 18 Sep 2012 13:26:32 +0200 + +xen (4.1.3-2) unstable; urgency=medium + + * Don't allow writing reserved bits in debug register. + CVE-2012-3494 + * Fix error handling in interrupt assignment. + CVE-2012-3495 + * Don't trigger bug messages on invalid flags. + CVE-2012-3496 + * Check array bounds in interrupt assignment. + CVE-2012-3498 + * Properly check bounds while setting the cursor in qemu. + CVE-2012-3515 + * Disable monitor in qemu by default. + CVE-2012-4411 + + -- Bastian Blank Fri, 07 Sep 2012 19:41:46 +0200 + +xen (4.1.3-1) unstable; urgency=medium + + * New upstream release: (closes: #683286) + - Don't leave the x86 emulation in a bad state. (closes: #683279) + CVE-2012-3432 + - Only check for shared pages while any exist on teardown. + CVE-2012-3433 + - Fix error handling for unexpected conditions. + - Update CPUID masking to latest Intel spec. + - Allow large ACPI ids. + - Fix IOMMU support for PCI-to-PCIe bridges. + - Disallow access to some sensitive IO-ports. + - Fix wrong address in IOTLB. + - Fix deadlock on CPUs without working cpufreq driver. + - Use uncached disk access in qemu. + - Fix buffer size on emulated e1000 device in qemu. + * Fixup broken and remove applied patches. + + -- Bastian Blank Fri, 17 Aug 2012 11:25:02 +0200 + +xen (4.1.3~rc1+hg-20120614.a9c0a89c08f2-5) unstable; urgency=low + + [ Ian Campbell ] + * Set tap device MAC addresses to fe:ff:ff:ff:ff:ff (Closes: #671018) + * Only run xendomains initscript if toolstack is xl or xm (Closes: #680528) + + [ Bastian Blank ] + * Actually build-depend on new enough version of dpkg-dev. + * Add xen-sytem-* meta-packages. We are finally in a position to do + automatic upgrades and this package is missing. (closes: #681376) + + -- Bastian Blank Sat, 28 Jul 2012 10:23:26 +0200 + +xen (4.1.3~rc1+hg-20120614.a9c0a89c08f2-4) unstable; urgency=low + + * Add Build-Using info to xen-utils package. + * Fix build-arch target. + + -- Bastian Blank Sun, 01 Jul 2012 19:52:30 +0200 + +xen (4.1.3~rc1+hg-20120614.a9c0a89c08f2-3) unstable; urgency=low + + * Remove /usr/lib/xen-default. It breaks systems if xenstored is not + compatible. + * Fix init script usage. + * Fix udev rules for emulated network devices: + - Force names of emulated network devices to a predictable name. + + -- Bastian Blank Sun, 01 Jul 2012 16:59:04 +0200 + +xen (4.1.3~rc1+hg-20120614.a9c0a89c08f2-2) unstable; urgency=low + + * Fix pointer missmatch in interrupt functions. Fixes build on i386. + + -- Bastian Blank Fri, 15 Jun 2012 18:00:51 +0200 + +xen (4.1.3~rc1+hg-20120614.a9c0a89c08f2-1) unstable; urgency=low + + * New upstream snapshot. + - Fix privilege escalation and syscall/sysenter DoS while using + non-canonical addresses by untrusted PV guests. (closes: #677221) + CVE-2012-0217 + CVE-2012-0218 + - Disable Xen on CPUs affected by AMD Erratum #121. PV guests can + cause a DoS of the host. + CVE-2012-2934 + * Don't fail if standard toolstacks are not available. (closes: #677244) + + -- Bastian Blank Thu, 14 Jun 2012 17:06:25 +0200 + +xen (4.1.2-7) unstable; urgency=low + + * Really use ucf. + * Update init script dependencies: + - Start $syslog before xen. + - Start drbd and iscsi before xendomains. (closes: #626356) + - Start corosync and heartbeat after xendomains. + * Remove /var/log/xen on purge. (closes: #656216) + + -- Bastian Blank Tue, 22 May 2012 10:44:41 +0200 + +xen (4.1.2-6) unstable; urgency=low + + * Fix generation of architectures for hypervisor packages. + * Remove information about loop devices, it is incorrect. (closes: #503044) + * Update xendomains init script: + - Create directory for domain images only root readable. (closes: #596048) + - Add missing sanity checks for variables. (closes: #671750) + - Remove not longer supported config options. + - Don't fail if no config is available. + - Remove extra output if domain was restored. + + -- Bastian Blank Sun, 06 May 2012 20:07:41 +0200 + +xen (4.1.2-5) unstable; urgency=low + + * Actually force init script rename. (closes: #669341) + * Fix long output from xl. + * Move complete init script setup. + * Rewrite xendomains init script: + - Use LSB output functions. + - Make output more clear. + - Use xen toolstack wrapper. + - Use a python script to properly read domain details. + * Set name for Domain-0. + + -- Bastian Blank Mon, 23 Apr 2012 11:56:45 +0200 + +xen (4.1.2-4) unstable; urgency=low + + [ Bastian Blank ] + * Build-depend on ipxe-qemu instead of ipxe. (closes: #665070) + * Don't longer use a4wide latex package. + * Use ucf for /etc/default/xen. + * Remove handling for old udev rules link and xenstored directory. + * Rename xend init script to xen. + + [ Lionel Elie Mamane ] + * Fix toolstack script to work with old dash. (closes: #648029) + + -- Bastian Blank Mon, 16 Apr 2012 08:47:29 +0000 + +xen (4.1.2-3) unstable; urgency=low + + * Merge xen-common source package. + * Remove xend wrapper, it should not be called by users. + * Support xl in init script. + * Restart xen daemons on upgrade. + * Restart and stop xenconsoled in init script. + * Load xen-gntdev module. + * Create /var/lib/xen. (closes: #658101) + * Cleanup udev rules. (closes: #657745) + + -- Bastian Blank Wed, 01 Feb 2012 19:28:28 +0100 + +xen (4.1.2-2) unstable; urgency=low + + [ Jon Ludlam ] + * Import (partially reworked) upstream changes for OCaml support. + - Rename the ocamlfind packages. + - Remove uuid and log libraries. + - Fix 2 bit-twiddling bugs and an off-by-one + * Fix build of OCaml libraries. + * Add OCaml library and development package. + * Include some missing headers. + + -- Bastian Blank Sat, 10 Dec 2011 19:13:25 +0000 + +xen (4.1.2-1) unstable; urgency=low + + * New upstream release. + * Build-depend on pkg-config. + * Add package libxen-4.1. Includes some shared libs. + + -- Bastian Blank Sat, 26 Nov 2011 18:28:06 +0100 + +xen (4.1.1-3) unstable; urgency=low + + [ Julien Danjou ] + * Remove Julien Danjou from the Uploaders field. (closes: #590439) + + [ Bastian Blank ] + * Use current version of python. (closes: #646660) + * Build-depend against liblzma-dev, it is used if available. + (closes: #646694) + * Update Standards-Version to 3.9.2. No changes. + * Don't use brace-expansion in debhelper install files. + + -- Bastian Blank Wed, 26 Oct 2011 14:42:33 +0200 + +xen (4.1.1-2) unstable; urgency=low + + * Fix hvmloader with gcc 4.6. + + -- Bastian Blank Fri, 05 Aug 2011 23:58:36 +0200 + +xen (4.1.1-1) unstable; urgency=low + + * New upstream release. + * Don't use qemu-dm if it is not needed. (Backport from xen-unstable.) + * Use dh_python2. + + -- Bastian Blank Mon, 18 Jul 2011 19:38:38 +0200 + +xen (4.1.0-3) unstable; urgency=low + + * Add ghostscript to build-deps. + * Enable qemu-dm build. + - Add qemu as another orig tar. + - Remove blktap1, bluetooth and sdl support from qemu. + - Recommend qemu-keymaps and qemu-utils. + + -- Bastian Blank Thu, 28 Apr 2011 15:20:45 +0200 + +xen (4.1.0-2) unstable; urgency=low + + * Re-enable hvmloader: + - Use packaged ipxe. + * Workaround incompatibility with xenstored of Xen 4.0. + + -- Bastian Blank Fri, 15 Apr 2011 11:38:25 +0200 + +xen (4.1.0-1) unstable; urgency=low + + * New upstream release. + + -- Bastian Blank Sun, 27 Mar 2011 18:09:28 +0000 + +xen (4.1.0~rc6-1) unstable; urgency=low + + * New upstream release candidate. + * Build documentation using pdflatex. + * Use python 2.6. (closes: #596545) + * Fix lintian override. + * Install new tools: xl, xenpaging. + * Enable blktap2. + - Use own md5 implementation. + - Fix includes. + - Fix linking of blktap2 binaries. + - Remove optimization setting. + * Temporarily disable hvmloader, wants to download ipxe. + * Remove xenstored pid check from xl. + + -- Bastian Blank Thu, 17 Mar 2011 16:12:45 +0100 + +xen (4.0.1-2) unstable; urgency=low + + * Fix races in memory management. + * Make sure that frame-table compression leaves enough alligned. + * Disable XSAVE support. (closes: #595490) + * Check for dying domain instead of raising an assertion. + * Add C6 state with EOI errata for Intel. + * Make some memory management interrupt safe. Unsure if really needed. + * Raise bar for inter-socket migrations on mostly-idle systems. + * Fix interrupt handling for legacy routed interrupts. + * Allow to set maximal domain memory even during a running change. + * Support new partition name in pygrub. (closes: #599243) + * Fix some comparisions "< 0" that may be optimized away. + * Check for MWAIT support before using it. + * Fix endless loop on interrupts on Nehalem cpus. + * Don't crash upon direct GDT/LDT access. (closes: #609531) + CVE-2010-4255 + * Don't loose timer ticks after domain restore. + * Reserve some space for IOMMU area in dom0. (closes: #608715) + * Fix hypercall arguments after trace callout. + * Fix some error paths in vtd support. Memory leak. + * Reinstate ACPI DMAR table. + + -- Bastian Blank Wed, 12 Jan 2011 15:01:40 +0100 + +xen (4.0.1-1) unstable; urgency=low + + * New upstream release. + - Fix IOAPIC S3 with interrupt remapping enabled. + + -- Bastian Blank Fri, 03 Sep 2010 17:14:28 +0200 + +xen (4.0.1~rc6-1) unstable; urgency=low + + * New upstream release candidate. + - Add some missing locks for page table walk. + - Fix NMU injection into guest. + - Fix ioapic updates for vt-d. + - Add check for GRUB2 commandline behaviour. + - Fix handling of invalid kernel images. + - Allow usage of powernow. + * Remove lowlevel python modules usage from pygrub. (closes: #588811) + + -- Bastian Blank Tue, 17 Aug 2010 23:15:34 +0200 + +xen (4.0.1~rc5-1) unstable; urgency=low + + * New upstream release candidate. + + -- Bastian Blank Mon, 02 Aug 2010 17:06:27 +0200 + +xen (4.0.1~rc3-1) unstable; urgency=low + + * New upstream release candidate. + * Call dh_pyversion with the correct version. + * Restart xen daemon on upgrade. + + -- Bastian Blank Wed, 30 Jun 2010 16:30:47 +0200 + +xen (4.0.0-2) unstable; urgency=low + + * Fix python dependency. (closes: #586666) + - Use python-support. + - Hardcode to use python 2.5 for now. + + -- Bastian Blank Mon, 21 Jun 2010 17:23:16 +0200 + +xen (4.0.0-1) unstable; urgency=low + + * Update to unstable. + * Fix spelling in README. + * Remove unnecessary build-depends. + * Fixup xend to use different filename lookup. + + -- Bastian Blank Thu, 17 Jun 2010 11:16:55 +0200 + +xen (4.0.0-1~experimental.2) experimental; urgency=low + + * Merge changes from 3.4.3-1. + + -- Bastian Blank Fri, 28 May 2010 12:58:12 +0200 + +xen (4.0.0-1~experimental.1) experimental; urgency=low + + * New upstream version. + * Rename source package to xen. + * Build depend against iasl and uuid-dev. + * Disable blktap2 support, it links against OpenSSL. + * Update copyright file. + + -- Bastian Blank Thu, 06 May 2010 15:47:38 +0200 + +xen-3 (3.4.3-1) unstable; urgency=low + + * New upstream version. + * Disable blktap support, it is unusable with current kernels. + * Disable libaio, was only used by blktap. + * Drop device creation support. (closes: #583283) + + -- Bastian Blank Fri, 28 May 2010 11:43:18 +0200 + +xen-3 (3.4.3~rc6-1) unstable; urgency=low + + * New upstream release candidate. + - Relocate multiboot modules. (closes: #580045) + - Support grub2 in pygrub. (closes: #573311) + + -- Bastian Blank Sat, 08 May 2010 11:32:29 +0200 + +xen-3 (3.4.3~rc3-2) unstable; urgency=low + + * Again list the complete version in the hypervisor. + * Fix path detection for bootloader, document it. (closes: #481105) + * Rewrite README. + + -- Bastian Blank Thu, 08 Apr 2010 16:14:58 +0200 + +xen-3 (3.4.3~rc3-1) unstable; urgency=low + + * New upstream release candidate. + * Use 3.0 (quilt) source format. + * Always use current python version. + + -- Bastian Blank Mon, 01 Mar 2010 22:14:22 +0100 + +xen-3 (3.4.2-2) unstable; urgency=low + + * Remove Jeremy T. Bouse from uploaders. + * Export blktap lib and headers. + * Build amd64 hypervisor on i386. (closes: #366315) + + -- Bastian Blank Sun, 22 Nov 2009 16:54:47 +0100 + +xen-3 (3.4.2-1) unstable; urgency=low + + * New upstream version. + * Strip hvmloader by hand. + * Remove extra license file from libxen-dev. + + -- Bastian Blank Mon, 16 Nov 2009 20:57:07 +0100 + +xen-3 (3.4.1-1) unstable; urgency=low + + * New upstream version. + + -- Bastian Blank Fri, 21 Aug 2009 21:34:38 +0200 + +xen-3 (3.4.0-2) unstable; urgency=low + + * Add symbols file for libxenstore3.0. (closes: #536173) + * Document that ioemu is currently unsupported. (closes: #536175) + * Fix location of fsimage plugins. (closes: #536174) + + -- Bastian Blank Sat, 18 Jul 2009 18:05:35 +0200 + +xen-3 (3.4.0-1) unstable; urgency=low + + [ Bastian Blank ] + * New upstream version. + * Remove ioemu for now. (closes: #490409, #496367) + * Remove non-pae hypervisor. + * Use debhelper compat level 7. + * Make the init script start all daemons. + + -- Bastian Blank Tue, 30 Jun 2009 22:33:22 +0200 + +xen-3 (3.2.1-2) unstable; urgency=low + + * Use e2fslibs based ext2 support for pygrub. (closes: #476366) + * Fix missing checks in pvfb code. + See CVE-2008-1952. (closes: #487095) + * Add support for loading bzImage files. (closes: #474509) + * Enable TLS support in ioemu code. + * Drop libcrypto usage because of GPL-incompatibility. + * Remove AES code from blktap drivers. Considered broken. + + -- Bastian Blank Sat, 28 Jun 2008 11:30:43 +0200 + +xen-3 (3.2.1-1) unstable; urgency=low + + * New upstream version. + * Set rpath relative to ${ORIGIN}. + * Add lintian override to xen-utils package. + + -- Bastian Blank Thu, 22 May 2008 14:01:47 +0200 + +xen-3 (3.2.0-5) unstable; urgency=low + + * Provide correct directory to dh_pycentral. + + -- Bastian Blank Mon, 14 Apr 2008 21:43:49 +0200 + +xen-3 (3.2.0-4) unstable; urgency=low + + * Pull in newer xen-utils-common. + * Fix missing size checks in the ioemu block driver. (closes: #469654) + See: CVE-2008-0928 + + -- Bastian Blank Fri, 07 Mar 2008 14:21:38 +0100 + +xen-3 (3.2.0-3) unstable; urgency=low + + * Clean environment for build. + * Add packages libxenstore3.0 and xenstore-utils. + * Move docs package in docs section to match overwrites. + * Make the hypervisor only recommend the utils. + * Cleanup installation. (closes: #462989) + + -- Bastian Blank Tue, 12 Feb 2008 12:40:56 +0000 + +xen-3 (3.2.0-2) unstable; urgency=low + + * Fix broken patch. (closes: #462522) + + -- Bastian Blank Sat, 26 Jan 2008 17:21:52 +0000 + +xen-3 (3.2.0-1) unstable; urgency=low + + * New upstream version. + * Add package libxen-dev. Including public headers and static libs. + (closes: #402249) + * Don't longer install xenfb, removed upstream. + + -- Bastian Blank Tue, 22 Jan 2008 12:51:49 +0000 + +xen-3 (3.1.2-2) unstable; urgency=low + + * Add missing rpath definitions. + * Fix building of pae version. + + -- Bastian Blank Sat, 08 Dec 2007 12:07:42 +0000 + +xen-3 (3.1.2-1) unstable; urgency=high + + * New upstream release: + - Move shared file into /var/run. (closes: #447795) + See CVE-2007-3919. + - x86: Fix various problems with debug-register handling. (closes: #451626) + See CVE-2007-5906. + + -- Bastian Blank Sat, 24 Nov 2007 13:24:45 +0000 + +xen-3 (3.1.1-1) unstable; urgency=low + + * New upstream release: + - Don't use exec with untrusted values in pygrub. (closes: #444430) + See CVE-2007-4993. + + -- Bastian Blank Fri, 19 Oct 2007 16:02:37 +0000 + +xen-3 (3.1.0-2) unstable; urgency=low + + * Switch to texlive for documentation. + * Drop unused transfig. + * Drop unused latex features from documentation. + * Build depend against gcc-multilib for amd64. (closes: #439662) + + -- Bastian Blank Fri, 31 Aug 2007 08:15:50 +0000 + +xen-3 (3.1.0-1) unstable; urgency=low + + [ Julien Danjou ] + * New upstream version. + + [ Ralph Passgang ] + * Added graphviz to Build-Indeps + + [ Bastian Blank ] + * Upstream removed one part of the version. Do it also. + * Merge utils packages. + * Install blktap support. + * Install pygrub. + * Install xenfb tools. + * xenconsoled startup is racy, wait a little bit. + + -- Bastian Blank Mon, 20 Aug 2007 15:05:08 +0000 + +xen-3.0 (3.0.4-1-1) unstable; urgency=low + + [ Bastian Blank ] + * New upstream version (closes: #394411) + + [ Guido Trotter ] + * Actually try to build and release xen 3.0.4 + * Update build dependencies + + -- Guido Trotter Wed, 23 May 2007 11:57:29 +0100 + +xen-3.0 (3.0.3-0-2) unstable; urgency=medium + + [Bastian Blank] + * Remove device recreate code. + * Remove build dependency on linux-support-X + + [ Guido Trotter ] + * Add missing build dependency on zlib1g-dev (closes: #396557) + * Add missing build dependencies on libncurses5-dev and x11proto-core-dev + (closes: #396561, #396567) + + -- Guido Trotter Thu, 2 Nov 2006 16:38:02 +0000 + +xen-3.0 (3.0.3-0-1) unstable; urgency=low + + * New upstream version. + + -- Bastian Blank Fri, 20 Oct 2006 11:04:35 +0000 + +xen-3.0 (3.0.3~rc4+hg11760-1) unstable; urgency=low + + * New upstream snapshot. + * Ignore update-grub errors. (closes: #392534) + + -- Bastian Blank Sat, 14 Oct 2006 13:09:53 +0000 + +xen-3.0 (3.0.3~rc1+hg11686-1) unstable; urgency=low + + * New upstream snapshot. + * Rename ioemu package to include the complete version. + * Fix name of hypervisor. (closes: #391771) + + -- Bastian Blank Mon, 9 Oct 2006 12:48:13 +0000 + +xen-3.0 (3.0.2-3+hg9762-1) unstable; urgency=low + + * New upstream snapshot. + * Rename hypervisor and utils packages to include the complete version. + * Redo build environment. + + -- Bastian Blank Mon, 4 Sep 2006 18:43:12 +0000 + +xen-3.0 (3.0.2+hg9697-2) unstable; urgency=low + + [ Guido Trotter ] + * Update xen-utils' README.Debian (closes: #372524) + + [ Bastian Blank ] + * Adopt new python policy. (closes: #380990) + * Add patch to make new kernels working on the hypervisor. + + -- Bastian Blank Tue, 15 Aug 2006 19:20:08 +0000 + +xen-3.0 (3.0.2+hg9697-1) unstable; urgency=low + + [ Guido Trotter ] + * Update Standards Version + * Merge upstream fixes trunk (upstream 3.0.2-3 + a couple of fixes) + + [ Bastian Blank ] + * Add xen-ioemu-3.0 package to support HVM guests (closes: #368496) + + -- Guido Trotter Wed, 31 May 2006 10:50:05 +0200 + +xen-3.0 (3.0.2+hg9681-1) unstable; urgency=low + + * Update xen-hypervisor-3.0-i386 and xen-hypervisor-3.0-i386-pae + descriptions, specifying what the difference between the two packages is + (closes: #366019) + * Merge upstream fixes trunk + + -- Guido Trotter Thu, 18 May 2006 15:25:02 +0200 + +xen-3.0 (3.0.2+hg9656-1) unstable; urgency=low + + * Merge upstream fixes trunk + - This includes a fix for CVE-2006-1056 + + -- Guido Trotter Thu, 27 Apr 2006 17:34:03 +0200 + +xen-3.0 (3.0.2+hg9651-1) unstable; urgency=low + + * Merge upstream fixes trunk + * Fix PAE disabled in pae build (Closes: #364875) + + -- Julien Danjou Wed, 26 Apr 2006 13:19:39 +0200 + +xen-3.0 (3.0.2+hg9646-1) unstable; urgency=low + + [ Guido Trotter ] + * Merge upstream fixes trunk + + [ Bastian Blank ] + * debian/patches/libdir.dpatch: Update to make xm save work + + -- Julien Danjou Mon, 24 Apr 2006 18:02:07 +0200 + +xen-3.0 (3.0.2+hg9611-1) unstable; urgency=low + + * Merge upstream bug fixes + * Fix bug with xend init.d script + + -- Julien Danjou Wed, 12 Apr 2006 17:35:35 +0200 + +xen-3.0 (3.0.2+hg9598-1) unstable; urgency=low + + * New upstream release + * Fix copyright file + + -- Julien Danjou Mon, 10 Apr 2006 17:02:55 +0200 + +xen-3.0 (3.0.1+hg8762-1) unstable; urgency=low + + * The "preserve our homes" release + * Now cooperatively maintained by the Debian Xen Team + * New upstream release (closes: #327493, #342249) + * Build depend on transfig (closes: #321157) + * Use gcc rather than gcc-3.4 to compile (closes: #323698) + * Split xen-hypervisor-3.0 and xen-utils-3.0 + * Build both normal and pae hypervisor packages + * Change maintainer and add uploaders field + * Add force-reload support for init script xendomains + * Remove dependency against bash + * Bump standards version to 3.6.2.2 + * xen-utils-3.0 conflicts and replaces xen + * Add dpatch structure to the package + * Remove build-dependency on gcc (it's build essential anyway) + * Make SrvServer.py not executable + * Create NEWS.Debian file with important upgrade notices + * Update copyright file + * Remove the linux-patch-xen package + * Removed useless build-dependencies: libncurses5-dev, wget + * Changed xendomains config path to /etc/default + * xen-utils-3.0 now provides xen-utils and xen-hypervisor-3.0-i386 & + xen-hypervisor-3.0-i386-pae & xen-hypervizor-amd64 now provide + xen-hypervisor + * Made xen-utils-3.0.postinst more fault-tolerant, so that upgrading + xen2 -> xen3 don't fail because of a running xen2 hypervisor + * Updated the "Replaces & Conflicts" + * Install only and correctly udev files + * Compile date is no more in current locale + * Add patch which add the debian version and maintainer in the version + string and removes the banner. + * Don't install unusable cruft in xen-utils + * Remove libxen packages (no stable API/ABI) + + -- Julien Danjou Wed, 5 Apr 2006 16:05:07 +0200 + +xen (2.0.6-1) unstable; urgency=low + + * Patches applied upstream: non-xen-init-exit.patch, add-build.patch, + python-install.patch, disable-html-docs.patch. + * New upstream released. Closes: #311336. + * Remove comparison to UML from xen short description. Closes: #317066. + * Make packages conflicts with 1.2 doc debs. Closes: #304285. + * Add iproute to xen depends, as it uses /bin/ip. Closes: #300488, + #317468. + + -- Adam Heath Wed, 06 Jul 2005 12:35:50 -0500 + +xen (2.0.5-3) experimental; urgency=low + + * Change priority/section to match the overrides file. + + -- Adam Heath Fri, 18 Mar 2005 12:43:50 -0600 + +xen (2.0.5-2) experimental; urgency=low + + * Mike McCallister , + Tommi Virtanen , Tom Hibbert : + Fix missing '.' in update-rc.d call in xen.postinst. Closes: #299384 + + -- Adam Heath Fri, 18 Mar 2005 11:39:56 -0600 + +xen (2.0.5-1) experimental; urgency=low + + * New upstream. + * Remove pic-lib.patch, tools-misc-TARGETS.patch, and clean-mttr.patch + as they have been applied upstream(in various forms). + * xend now starts at priority 20, stops at 21, while xendomains starts + at 21, and stops at 20. + + -- Adam Heath Fri, 11 Mar 2005 14:33:33 -0600 + +xen (2.0.4-4) experimental; urgency=low + + * Bah, major booboo. Add /boot to debian/xen.install, so xen.gz will + get shipped. Reported by Clint Adams . + + -- Adam Heath Tue, 15 Feb 2005 13:00:57 -0600 + +xen (2.0.4-3) experimental; urgency=low + + * Fix file overlap(/usr/share/doc/xen/examples/*) between xen and + xen-docs. Reported by Tupshin Harper . + + -- Adam Heath Sun, 06 Feb 2005 01:22:45 -0600 + +xen (2.0.4-2) experimental; urgency=low + + * Fix kernel patch generation. It was broken when I integrated with + debian's kernel source. I used a symlink, and diff doesn't follow + those. + + -- Adam Heath Sat, 05 Feb 2005 18:16:35 -0600 + +xen (2.0.4-1) experimental; urgency=low + + * New upstream. + * xen.deb can now install on a plain kernel; that is, the init scripts + exit successfully if /proc/xen/privcmd doesn't exist. This allows + for dual-boot setups. + * Manpages do not yet exist xend, xenperf, xensv, xfrd, nor xm. xend + xfrd are daemons, and take little if any options. I've not had a need + to use xenperf nor xensv yet. xm has nice built in help(xm help). + * Upstream now requires either linux 2.4.29, or 2.6.10. Since 2.4.29 is + not yet in debian, disable the 2.4 patch generation. Closes: #271245. + * Not certain how the kernel-patch-xen was empty. It's not now, with + the repackaging. Closes: #272299. + * Xen no longer produces kernel images, so problems about missing features + are no longer valid. Closes: #253924. + * Acknowledge nmu bugs: + * No longer build-depend on gcc 3.3, as the default gcc works. Closes: + #243048. + + -- Adam Heath Sat, 05 Feb 2005 18:04:27 -0600 + +xen (2.0.3-0.1) unstable; urgency=low + + * Changes from Tommi Virtanen: + * Added dh-kpatches and libcurl3-dev to Build-Depends. + * Add /etc/xen/sv/params.py and /etc/xen/xend/params.py. + * Add xmexample1 and xmexample2 to xen/doc/examples. + + -- Adam Heath Wed, 26 Jan 2005 10:55:07 -0600 + +xen (2.0.3-0) unstable; urgency=low + + * New upstream. Closes: #280733. + * Repackaged from scratch. + * Using unreleased patch management system. See debian/README.build. + * After extracting the .dsc, there are no special steps needed + * Those wanting to change the source, use the normal procedures for + any package, including using interdiff(or other tool) to send a + patch to me or the bts. + * No longer try to do anything fancy with regard to the layout of the + built kernels. Now, only patches are distributed. Please make use of + the xen support in kernel-package. + * Early preview release to #debian-devel. + + -- Adam Heath Tue, 25 Jan 2005 13:24:54 -0600 + +xen (1.2-4.1) unstable; urgency=high + + * NMU + * Remove gcc-3.2 from Build-Depends as isn't used during build + (Closes: #243048) + + -- Frank Lichtenheld Sat, 21 Aug 2004 17:42:28 +0200 + +xen (1.2-4) unstable; urgency=low + + * Added xen-docs.README.Debian, which explains the kernel image layout, + and contains references on the locations differ from what is mentioned + by the upstream documentation. Closes: #230345. + + -- Adam Heath Fri, 26 Mar 2004 17:36:41 -0600 + +xen (1.2-3) unstable; urgency=low + + * Add kernel-source-2.4.25 and kernel-patch-debian-2.4.25 to + Build-Depends-Indep. + + -- Adam Heath Tue, 23 Mar 2004 20:14:39 -0600 + +xen (1.2-2) unstable; urgency=low + + * xen: moved /boot/xen.gz to /usr/lib/kernels/xen-i386/images/vmlinuz + * kernel-image, kernel-modules: swapped i386/xeno to xeno/i386 in + /usr/lib/kernels. + * Add kernel-patch-nfs-swap deb. + * Apply additional patches to kernel-image-xen: + * nfs-group + * nfs-swap + + -- Adam Heath Thu, 04 Mar 2004 12:47:47 -0600 + +xen (1.2-1) unstable; urgency=low + + * Initial version. + + -- Adam Heath Tue, 02 Mar 2004 13:21:52 -0600 diff --git a/compat b/compat new file mode 100644 index 0000000000..ec635144f6 --- /dev/null +++ b/compat @@ -0,0 +1 @@ +9 diff --git a/control b/control new file mode 100644 index 0000000000..64a87dd75a --- /dev/null +++ b/control @@ -0,0 +1,167 @@ +Source: xen +Section: kernel +Priority: optional +Maintainer: Debian Xen Team +Uploaders: Guido Trotter , Bastian Blank , Ian Jackson +Standards-Version: 3.9.4 +Build-Depends: autotools-dev, debhelper (>> 9), dpkg-dev (>= 1.16.0~), lsb-release, python-dev, bcc [i386 amd64], gcc-multilib [i386 amd64], e2fslibs-dev, iasl, seabios (>= 1.7.4-2~) [i386 amd64], libaio-dev, libfdt-dev [armhf arm64], libglib2.0-dev, liblzma-dev, libncurses5-dev, libpixman-1-dev, libyajl-dev, pkg-config, uuid-dev, zlib1g-dev +XS-Python-Version: current + +Package: libxen-4.11 +Architecture: amd64 arm64 armhf i386 +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Public libs for Xen + This package contains the shared toolstack libraries for Xen. +Multi-Arch: same + +Package: libxenstore3.0 +Architecture: amd64 arm64 armhf i386 +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Xenstore communications library for Xen + This package contains the client library interface to XenStore. +Multi-Arch: same + +Package: libxen-dev +Architecture: amd64 arm64 armhf i386 +Section: libdevel +Depends: libxen-4.11 (= ${binary:Version}), libxenstore3.0 (= ${binary:Version}), ${misc:Depends} +Description: Public headers and libs for Xen + This package contains the public headers and static libraries for Xen. + . + The libxenlight library is intended as a common base for all Xen toolstack + developers. The libxlutil library contains additional helpers which may + be useful to toolstack developers. + . + The libxenstore library allows userspace processes to interact with the + XenStore database. XenStore is a shared database used for interdomain + communication of configuration and status information. It is accessible + to all domains running on the same Xen host. See + http://wiki.xen.org/wiki/XenStore for more information. + . + The libxenctrl, libxenguest and other remaining included libraries are + internal libraries intended for use by the Xen toolstack and are not + intended to be used directly. Toolstack authors should use libxenlight. +Multi-Arch: same + +Package: xenstore-utils +Architecture: amd64 arm64 armhf i386 +Section: admin +Depends: ${shlibs:Depends}, ${misc:Depends} +Replaces: xen-utils-common (<= 3.1.0-1) +Conflicts: xen-utils-common (<= 3.1.0-1) +Description: Xenstore command line utilities for Xen + This package contains command line utilities for interacting with + XenStore. + . + XenStore is a shared database used for interdomain communication of + configuration and status information. It is accessible to all domains + running on the same Xen host. See http://wiki.xen.org/wiki/XenStore for + more information. + . + In the common case these tools are used by the Xen toolstack running in + domain0 (or a driver domain) however they may also be used in a guest + domain to support local scripting which wants to communicate via XenStore. + +Package: xen-utils-common +Architecture: all +Depends: lsb-base, python, udev, xenstore-utils, ${misc:Depends} +Description: Xen administrative tools - common files + The userspace tools to manage a system virtualized through the Xen virtual + machine monitor. + . + This package is only required on the host system (Domain 0) and not on the + virtual guest systems (Domain U). + +Package: xen-hypervisor-common +Architecture: all +Depends: ${misc:Depends} +Replaces: xen-hypervisor-4.8-amd64, xen-hypervisor-4.8-arm64, xen-hypervisor-4.8-armhf +Description: Xen Hypervisor - common files + The configuration which arranges for an installed hypervisor to be booted + as default, with the right command line arguments passed to both + hypervisor and host (Domain 0) kernel. + . + This package is only required on the host system (Domain 0) and not on the + virtual guest systems (Domain U). + +Package: xen-utils-4.11 +Architecture: amd64 arm64 armhf i386 +Provides: xen-utils +Depends: ${shlibs:Depends}, ${misc:Depends}, ${python:Depends}, xen-utils-common (>= ${source:Version}) +Recommends: bridge-utils, libc6-xen [i386], xen-hypervisor-4.11, qemu-system-x86, grub-xen-host [i386 amd64] +Suggests: qemu-utils [i386 amd64], seabios [i386 amd64], ovmf +Description: XEN administrative tools + The userspace tools to manage a system virtualized through the XEN virtual + machine monitor. + . + qemu-utils and seabios are neded for "Xen HVM" (amd64 and i386) +Built-Using: ${misc:Built-Using} + +Package: xen-hypervisor-4.11-amd64 +Architecture: amd64 i386 +Provides: xen-hypervisor, xen-hypervisor-4.11, xen-hypervisor-amd64 +Depends: ${misc:Depends} +Recommends: xen-utils-4.11, xen-hypervisor-common +Description: Xen Hypervisor on AMD64 + The hypervisor is the "core" for XEN itself. It gets booted by the boot + loader and controls cpu and memory, sharing them between your + administrative domain (Domain 0) and the virtual guest systems. + . + In order to boot a XEN system along with this package you also need a + kernel specifically crafted to work as the Domain 0, mediating hardware + access for XEN itself. + +Package: xen-system-amd64 +Architecture: amd64 i386 +Provides: xen-system +Depends: xen-hypervisor-4.11-amd64, xen-hypervisor-common, xen-utils-4.11, ${misc:Depends} +Description: Xen System on AMD64 (meta-package) + This package depends on the latest Xen hypervisor for use on AMD64 and the + Xen utils. + +Package: xen-hypervisor-4.11-arm64 +Architecture: arm64 +Provides: xen-hypervisor, xen-hypervisor-4.11, xen-hypervisor-arm64 +Depends: ${misc:Depends} +Recommends: xen-utils-4.11, xen-hypervisor-common +Description: Xen Hypervisor on ARM64 + The hypervisor is the "core" for XEN itself. It gets booted by the boot + loader and controls cpu and memory, sharing them between your + administrative domain (Domain 0) and the virtual guest systems. + . + In order to boot a XEN system along with this package you also need a + kernel specifically crafted to work as the Domain 0, mediating hardware + access for XEN itself. + +Package: xen-system-arm64 +Architecture: arm64 +Provides: xen-system +Depends: xen-hypervisor-4.11-arm64, xen-hypervisor-common, xen-utils-4.11, ${misc:Depends} +Description: Xen System on ARM64 (meta-package) + This package depends on the latest Xen hypervisor for use on ARM64 and the + Xen utils. + +Package: xen-hypervisor-4.11-armhf +Architecture: armhf +Provides: xen-hypervisor, xen-hypervisor-4.11, xen-hypervisor-armhf +Depends: ${misc:Depends} +Recommends: xen-utils-4.11, xen-hypervisor-common +Description: Xen Hypervisor on ARMHF + The hypervisor is the "core" for XEN itself. It gets booted by the boot + loader and controls cpu and memory, sharing them between your + administrative domain (Domain 0) and the virtual guest systems. + . + In order to boot a XEN system along with this package you also need a + kernel specifically crafted to work as the Domain 0, mediating hardware + access for XEN itself. + +Package: xen-system-armhf +Architecture: armhf +Provides: xen-system +Depends: xen-hypervisor-4.11-armhf, xen-hypervisor-common, xen-utils-4.11, ${misc:Depends} +Description: Xen System on ARMHF (meta-package) + This package depends on the latest Xen hypervisor for use on ARMHF and the + Xen utils. + diff --git a/control.md5sum b/control.md5sum new file mode 100644 index 0000000000..8a45735f3c --- /dev/null +++ b/control.md5sum @@ -0,0 +1,17 @@ +90846bd8cd1227c290d02071e1f3b141 debian/changelog +dc7b5d9f0538e3180af4e9aff9b0bd57 debian/bin/gencontrol.py +9e089bdfb9c848da38da7f50e37a5502 debian/templates/control.main.in +a15fa64ce6deead28d33c1581b14dba7 debian/templates/xen-hypervisor.postinst.in +28356e01cce3f5f226bacec4c49a7f1e debian/templates/control.system.latest.in +03f63e67cf2d915bfbb535f8c9d9e2e4 debian/templates/xen-utils.postinst.in +63ad8a975156f7bf2327f0e1dc7fc9e2 debian/templates/control.source.in +22492e0565a4754b5e008ca7cac871da debian/templates/xen-hypervisor.postrm.in +02ec00ee85d07ab4eb277a91df014e0c debian/templates/control.hypervisor.in +4974334083116945da78ec656b4371f5 debian/templates/control.utils.in +dcabf82578122540e0534f72750698d5 debian/templates/xen-utils.lintian-overrides.in +b6acd21c3924e6ec6f9c547afbbc7d9e debian/templates/xen-utils.prerm.in +9851cdcecfae45a8c4f95ef676e26973 debian/arch/defines +bda767ffd62b57de88b50731794f1374 debian/arch/i386/defines +06efb201e83233c4607b13c8dad5c031 debian/arch/armhf/defines +afd11afd204a8929340d194894572353 debian/arch/amd64/defines +b6a35272efc8545fafab547e1cf492cb debian/arch/arm64/defines diff --git a/copyright b/copyright new file mode 100644 index 0000000000..9a0736c277 --- /dev/null +++ b/copyright @@ -0,0 +1,307 @@ +This work was downloaded from + + http://xenbits.xensource.com/ + +Copyright: + + Copyright (C) 1998-2005 Hewlett-Packard Co + 1999-2006 Silicon Graphics, Inc + 2001-2006 IBM Corporation + 2005-2006 XenSource Inc + 2006-2010 Citrix Systems Inc. + and many others + +License: + + This package is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see + +On Debian systems, the complete text of the GNU General +Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". + +The bundled qemu is: + + Copyright (C) 2007 Alexander Graf + 2005,2007 Alex Beregszaszi + 2005-2008 Andrzej Zaborowski + 2005-2007 Anthony Liguori + 2004 Antony T Curtis + 2007 Arastra, Inc. + 2007 Armin Kuster or + 1999 AT&T Laboratories Cambridge + 2006,2007 Aurelien Jarno + 2007-2008 AXIS Communications AB + 2007-2008 Bull S.A.S. + 2006 Christian Limpach + 2008 Citrix Systems, Inc. + 2005-2008 CodeSourcery + 2007 Dan Aloni + 1995,1996 Danny Gasparovski + 2000-2003 David McCullough + 2008 Dmitry Baryshkov + 2007-2009 Edgar E. Iglesias, Axis Communications AB. + 1996-1999 Eduardo Horvath + 1998,2003-2008 Fabrice Bellard + 2005 Filip Navara + 2006 Frederick Reeve + 2009 Freescale Semiconductor + 1986-2007 Free Software Foundation, Inc. + 2004 Gianni Tedesco + 2008 Gleb Natapov + 2002 Greg Ungerer + 2007-2009 Hervé Poussineau + 2005,2007,2008 IBM Corporation + 2008 IBM Corporation + 2006 Igor Kovalenko + 2006 InnoTek Systemberatung GmbH + 1999-2008 Intel Corporation + 2009 Isaku Yamahata + 2003-2004 James Yonan + 2008 Jan Kiszka + 2006 Joachim Henke + 2003-2007 Jocelyn Mayer + 2004,2005 Johannes E. Schindelin + 2005 Julian Chesterfield and Andrew Warfield. + 2008 Kamala Narasimhan + 1998 Kenneth Albanowski + 2008 Kevin Wolf + 2009 Kevin Wolf + 2009 Laurent Vivier + 2007-2008 Lauro Ramos Venancio + 2000,2001 Lineo, by David McCullough + 1991,1992,1996 Linus Torvalds + 2006 Lonnie Mendez + 2008 Lubomir Rintel + 2004,2007 Magnus Damm + 2004 Makoto Suzuki (suzu) + 2002-2006 Marcel Holtmann + 2006 Marius Groeger (FPU operations) + 2007 Marko Kohtala + 2002-2003 Maxim Krasnyansky + 2008 Max Krasnyansky + 2005,2008 Mike Kronenberg + 2007 MontaVista Software, Inc + 2007 Neocleus Corporation. + 2007-2008 Nokia Corporation + 2001 OKTET Ltd., St.-Petersburg, Russia + 2006-2008 Openedhand Ltd. + 2007-2008 OpenMoko, Inc. + 1996 Paul Mackerras. + 2008 Paul Mundt + 2006 Pierre d'Herbemont + 2000-2001 Qualcomm Incorporated + 2006-2008 Qumranet Technologies + 1997-1999,2001,2009 Red Hat, Inc. + 1988,1989,1990,1991,1992 Richard Outerbridge + 2007 Robert Reif + 1998-2004 Samuel Rydh (samuel@ibrium.se) + 2005 Samuel Tardieu + 2007,2008 Samuel Thibault + 2008 Semihalf + 2008 Shin-ichiro KAWASAKI + 2002 SnapGear, by Paul Dale + 2006-2007 Stefan Weil + 2008 Takashi YOSHII + 1999,2000 Tatsuyuki Satoh , MultiArcadeMachineEmurator development + 1993 Theodore Ts'o + 2006,2007 Thiemo Seufer + 2003 Thomas M. Ogrisegg + 2006 Thomas Sailer + 1998-2001,2003 Thomas Sailer (t.sailer@alumni.ethz.ch) + 2006,2007 Thorsten Zitterell + 2000-2007 Tibor "TS" Schütz + 2008 TJ + 2002-2005 Vassili Karpov (malc) + 2005 Vassili Karpov (malc) + 2007 Vladimir Ananiev + 2006 XenSource + +The Debian packaging is: + + Copyright (C) 2008-2010 Bastian Blank + +you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +The following parts are subject of a different license: +* tools/firmware/vgabios +* tools/libaio +* tools/libxen +* tools/xenstat/libxenstat +* tools/xenstore + + This package is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +On Debian systems, the complete text of the GNU Lesser General +Public License can be found in "/usr/share/common-licenses/LGPL-2". + +Files in xen/include/public are subject to the following license: + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + +Files in extra/mini-os are subject to the following license: + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +Files in tools/vtpm_manager are subject to the following license: + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Intel Corporation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. + +File tools/python/test.py is subject to the following license: + + This software is Copyright (c) Zope Corporation (tm) and + Contributors. All rights reserved. + + This license has been certified as open source. It has also + been designated as GPL compatible by the Free Software + Foundation (FSF). + + Redistribution and use in source and binary forms, with or + without modification, are permitted provided that the + following conditions are met: + + 1. Redistributions in source code must retain the above + copyright notice, this list of conditions, and the following + disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions, and the following + disclaimer in the documentation and/or other materials + provided with the distribution. + + 3. The name Zope Corporation (tm) must not be used to + endorse or promote products derived from this software + without prior written permission from Zope Corporation. + + 4. The right to distribute this software or to use it for + any purpose does not give you the right to use Servicemarks + (sm) or Trademarks (tm) of Zope Corporation. Use of them is + covered in a separate agreement (see + http://www.zope.com/Marks). + + 5. If any files are modified, you must cause the modified + files to carry prominent notices stating that you changed + the files and the date of any change. + + Disclaimer + + THIS SOFTWARE IS PROVIDED BY ZOPE CORPORATION ``AS IS'' + AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT + NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + NO EVENT SHALL ZOPE CORPORATION OR ITS CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + DAMAGE. + + This software consists of contributions made by Zope + Corporation and many individuals on behalf of Zope + Corporation. Specific attributions are listed in the + accompanying credits file. + +Files in tools/python/logging are subject to the following license: + + Copyright (C) 2001-2004 by Vinay Sajip. All Rights Reserved. + + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose and without fee is hereby granted, + provided that the above copyright notice appear in all copies and that + both that copyright notice and this permission notice appear in + supporting documentation, and that the name of Vinay Sajip + not be used in advertising or publicity pertaining to distribution + of the software without specific, written prior permission. + + VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING + ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL + VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR + ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR + IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + diff --git a/lib/python/debian_linux/__init__.py b/lib/python/debian_linux/__init__.py new file mode 100644 index 0000000000..b785cebf71 --- /dev/null +++ b/lib/python/debian_linux/__init__.py @@ -0,0 +1 @@ +# Module diff --git a/lib/python/debian_linux/abi.py b/lib/python/debian_linux/abi.py new file mode 100644 index 0000000000..0c4b3bdbc7 --- /dev/null +++ b/lib/python/debian_linux/abi.py @@ -0,0 +1,42 @@ +class Symbol(object): + def __init__(self, name, module, version, export): + self.name, self.module = name, module + self.version, self.export = version, export + + def __eq__(self, other): + if not isinstance(other, Symbol): + return NotImplemented + + # Symbols are resolved to modules by depmod at installation/ + # upgrade time, not compile time, so moving a symbol between + # modules is not an ABI change. Compare everything else. + if self.name != other.name: + return False + if self.version != other.version: + return False + if self.export != other.export: + return False + + return True + + def __ne__(self, other): + ret = self.__eq__(other) + if ret is NotImplemented: + return ret + return not ret + + +class Symbols(dict): + def __init__(self, file=None): + if file: + self.read(file) + + def read(self, file): + for line in file: + version, name, module, export = line.strip().split() + self[name] = Symbol(name, module, version, export) + + def write(self, file): + for s in sorted(self.values(), key=lambda i: i.name): + file.write("%s %s %s %s\n" % + (s.version, s.name, s.module, s.export)) diff --git a/lib/python/debian_linux/config.py b/lib/python/debian_linux/config.py new file mode 100644 index 0000000000..004469af8f --- /dev/null +++ b/lib/python/debian_linux/config.py @@ -0,0 +1,260 @@ +import collections +import os +import os.path +import pickle +import re +import sys +import textwrap + +from configparser import RawConfigParser + +__all__ = [ + 'ConfigCoreDump', + 'ConfigCoreHierarchy', + 'ConfigParser', +] + + +class SchemaItemBoolean(object): + def __call__(self, i): + i = i.strip().lower() + if i in ("true", "1"): + return True + if i in ("false", "0"): + return False + raise Error + + +class SchemaItemInteger(object): + def __call__(self, i): + try: + return int(i.strip(), 0) + except ValueError: + raise Error + + +class SchemaItemList(object): + def __init__(self, type="\s+"): + self.type = type + + def __call__(self, i): + i = i.strip() + if not i: + return [] + return [j.strip() for j in re.split(self.type, i)] + + +# Using OrderedDict instead of dict makes the pickled config reproducible +class ConfigCore(collections.OrderedDict): + def get_merge(self, section, arch, featureset, flavour, key, default=None): + temp = [] + + if arch and featureset and flavour: + temp.append(self.get((section, arch, featureset, flavour), {}).get(key)) + temp.append(self.get((section, arch, None, flavour), {}).get(key)) + if arch and featureset: + temp.append(self.get((section, arch, featureset), {}).get(key)) + if arch: + temp.append(self.get((section, arch), {}).get(key)) + if featureset: + temp.append(self.get((section, None, featureset), {}).get(key)) + temp.append(self.get((section,), {}).get(key)) + + ret = [] + + for i in temp: + if i is None: + continue + elif isinstance(i, (list, tuple)): + ret.extend(i) + elif ret: + # TODO + return ret + else: + return i + + return ret or default + + def merge(self, section, arch=None, featureset=None, flavour=None): + ret = {} + ret.update(self.get((section,), {})) + if featureset: + ret.update(self.get((section, None, featureset), {})) + if arch: + ret.update(self.get((section, arch), {})) + if arch and featureset: + ret.update(self.get((section, arch, featureset), {})) + if arch and featureset and flavour: + ret.update(self.get((section, arch, None, flavour), {})) + ret.update(self.get((section, arch, featureset, flavour), {})) + return ret + + def dump(self, fp): + pickle.dump(self, fp, 0) + + +class ConfigCoreDump(object): + def __new__(self, fp): + return pickle.load(fp) + + +class ConfigCoreHierarchy(object): + schema_base = { + 'base': { + 'arches': SchemaItemList(), + 'enabled': SchemaItemBoolean(), + 'featuresets': SchemaItemList(), + 'flavours': SchemaItemList(), + }, + } + + def __new__(cls, schema, dirs=[]): + schema_complete = cls.schema_base.copy() + for key, value in schema.items(): + schema_complete.setdefault(key, {}).update(value) + return cls.Reader(dirs, schema_complete)() + + class Reader(object): + config_name = "defines" + + def __init__(self, dirs, schema): + self.dirs, self.schema = dirs, schema + + def __call__(self): + ret = ConfigCore() + self.read(ret) + return ret + + def get_files(self, *dirs): + dirs = list(dirs) + dirs.append(self.config_name) + return (os.path.join(i, *dirs) for i in self.dirs if i) + + def read_arch(self, ret, arch): + config = ConfigParser(self.schema) + config.read(self.get_files(arch)) + + featuresets = config['base', ].get('featuresets', []) + flavours = config['base', ].get('flavours', []) + + for section in iter(config): + if section[0] in featuresets: + real = (section[-1], arch, section[0]) + elif len(section) > 1: + real = (section[-1], arch, None) + section[:-1] + else: + real = (section[-1], arch) + section[:-1] + s = ret.get(real, {}) + s.update(config[section]) + ret[tuple(real)] = s + + for featureset in featuresets: + self.read_arch_featureset(ret, arch, featureset) + + if flavours: + base = ret['base', arch] + featuresets.insert(0, 'none') + base['featuresets'] = featuresets + del base['flavours'] + ret['base', arch] = base + ret['base', arch, 'none'] = {'flavours': flavours, 'implicit-flavour': True} + + def read_arch_featureset(self, ret, arch, featureset): + config = ConfigParser(self.schema) + config.read(self.get_files(arch, featureset)) + + flavours = config['base', ].get('flavours', []) + + for section in iter(config): + real = (section[-1], arch, featureset) + section[:-1] + s = ret.get(real, {}) + s.update(config[section]) + ret[tuple(real)] = s + + def read(self, ret): + config = ConfigParser(self.schema) + config.read(self.get_files()) + + arches = config['base', ]['arches'] + featuresets = config['base', ].get('featuresets', []) + + for section in iter(config): + if section[0].startswith('featureset-'): + real = (section[-1], None, section[0][11:]) + else: + real = (section[-1],) + section[1:] + ret[real] = config[section] + + for arch in arches: + self.read_arch(ret, arch) + for featureset in featuresets: + self.read_featureset(ret, featureset) + + def read_featureset(self, ret, featureset): + config = ConfigParser(self.schema) + config.read(self.get_files('featureset-%s' % featureset)) + + for section in iter(config): + real = (section[-1], None, featureset) + s = ret.get(real, {}) + s.update(config[section]) + ret[real] = s + + +class ConfigParser(object): + __slots__ = '_config', 'schemas' + + def __init__(self, schemas): + self.schemas = schemas + + self._config = config = RawConfigParser() + + def __getitem__(self, key): + return self._convert()[key] + + def __iter__(self): + return iter(self._convert()) + + def __str__(self): + return '<%s(%s)>' % (self.__class__.__name__, self._convert()) + + def _convert(self): + ret = {} + for section in self._config.sections(): + data = {} + for key, value in self._config.items(section): + data[key] = value + section_list = section.split('_') + section_base = section_list[-1] + if section_base in self.schemas: + section_ret = tuple(section_list) + data = self._convert_one(self.schemas[section_base], data) + else: + section_ret = (section, ) + ret[section_ret] = data + return ret + + def _convert_one(self, schema, data): + ret = {} + for key, value in data.items(): + if key in schema: + value = schema[key](value) + ret[key] = value + return ret + + def keys(self): + return self._convert().keys() + + def read(self, data): + return self._config.read(data) + + +if __name__ == '__main__': + import sys + sys.path.append('debian/lib/python') + config = ConfigCoreDump(open('debian/config.defines.dump', 'rb')) + for section, items in sorted(config.items(), key=lambda a:tuple(i or '' for i in a[0])): + print(u"[%s]" % (section,)) + for item, value in sorted(items.items()): + print(u"%s: %s" % (item, value)) + print() diff --git a/lib/python/debian_linux/debian.py b/lib/python/debian_linux/debian.py new file mode 100644 index 0000000000..7ad5f93274 --- /dev/null +++ b/lib/python/debian_linux/debian.py @@ -0,0 +1,468 @@ +import collections +import os.path +import re + +from . import utils + + +class Changelog(list): + _rules = r""" +^ +(?P + \w[-+0-9a-z.]+ +) +\ +\( +(?P + [^\(\)\ \t]+ +) +\) +\s+ +(?P + [-+0-9a-zA-Z.]+ +) +\;\s+urgency= +(?P + \w+ +) +""" + _re = re.compile(_rules, re.X) + + class Entry(object): + __slot__ = 'distribution', 'source', 'version', 'urgency' + + def __init__(self, distribution, source, version, urgency): + self.distribution, self.source, self.version, self.urgency = \ + distribution, source, version, urgency + + def __init__(self, dir='', version=None): + if version is None: + version = Version + f = open(os.path.join(dir, "debian/changelog"), encoding="UTF-8") + while True: + line = f.readline() + if not line: + break + match = self._re.match(line) + if not match: + continue + try: + v = version(match.group('version')) + except Exception: + if not len(self): + raise + v = Version(match.group('version')) + self.append(self.Entry(match.group('distribution'), + match.group('source'), v, + match.group('urgency'))) + + +class Version(object): + _version_rules = r""" +^ +(?: + (?P + \d+ + ) + : +)? +(?P + .+? +) +(?: + - + (?P[^-]+) +)? +$ +""" + _version_re = re.compile(_version_rules, re.X) + + def __init__(self, version): + match = self._version_re.match(version) + if match is None: + raise RuntimeError(u"Invalid debian version") + self.epoch = None + if match.group("epoch") is not None: + self.epoch = int(match.group("epoch")) + self.upstream = match.group("upstream") + self.revision = match.group("revision") + + def __str__(self): + return self.complete + + @property + def complete(self): + if self.epoch is not None: + return u"%d:%s" % (self.epoch, self.complete_noepoch) + return self.complete_noepoch + + @property + def complete_noepoch(self): + if self.revision is not None: + return u"%s-%s" % (self.upstream, self.revision) + return self.upstream + + @property + def debian(self): + from warnings import warn + warn(u"debian argument was replaced by revision", DeprecationWarning, stacklevel=2) + return self.revision + + +class VersionLinux(Version): + _version_linux_rules = r""" +^ +(?P + \d+\.\d+ +) +(?P + (?:\.\d+)? + (?:-[a-z]+\d+)? +) +(?: + ~ + (?P + .+? + ) +)? +(?: + \.dfsg\. + (?P + \d+ + ) +)? +- +\d+ +(\.\d+)? +(?: + (?P + ~exp\d+ + ) + | + (?P + [~+]deb\d+u\d+ + )? + (?P + ~bpo\d+\+\d+ + )? + | + (?P + [^-]+ + ) +) +$ +""" + _version_linux_re = re.compile(_version_linux_rules, re.X) + + def __init__(self, version): + super(VersionLinux, self).__init__(version) + match = self._version_linux_re.match(version) + if match is None: + raise RuntimeError(u"Invalid debian linux version") + d = match.groupdict() + self.linux_modifier = d['modifier'] + self.linux_version = d['version'] + if d['modifier'] is not None: + assert not d['update'] + self.linux_upstream = '-'.join((d['version'], d['modifier'])) + else: + self.linux_upstream = d['version'] + self.linux_upstream_full = self.linux_upstream + d['update'] + self.linux_dfsg = d['dfsg'] + self.linux_revision_experimental = match.group('revision_experimental') and True + self.linux_revision_security = match.group('revision_security') and True + self.linux_revision_backports = match.group('revision_backports') and True + self.linux_revision_other = match.group('revision_other') and True + + +class PackageArchitecture(collections.MutableSet): + __slots__ = '_data' + + def __init__(self, value=None): + self._data = set() + if value: + self.extend(value) + + def __contains__(self, value): + return self._data.__contains__(value) + + def __iter__(self): + return self._data.__iter__() + + def __len__(self): + return self._data.__len__() + + def __str__(self): + return ' '.join(sorted(self)) + + def add(self, value): + self._data.add(value) + + def discard(self, value): + self._data.discard(value) + + def extend(self, value): + if isinstance(value, str): + for i in re.split('\s', value.strip()): + self.add(i) + else: + raise RuntimeError + + +class PackageDescription(object): + __slots__ = "short", "long" + + def __init__(self, value=None): + self.short = [] + self.long = [] + if value is not None: + desc_split = value.split("\n", 1) + self.append_short(desc_split[0]) + if len(desc_split) == 2: + self.append(desc_split[1]) + + def __str__(self): + wrap = utils.TextWrapper(width=74, fix_sentence_endings=True).wrap + short = ', '.join(self.short) + long_pars = [] + for i in self.long: + long_pars.append(wrap(i)) + long = '\n .\n '.join(['\n '.join(i) for i in long_pars]) + return short + '\n ' + long if long else short + + def append(self, str): + str = str.strip() + if str: + self.long.extend(str.split(u"\n.\n")) + + def append_short(self, str): + for i in [i.strip() for i in str.split(u",")]: + if i: + self.short.append(i) + + def extend(self, desc): + if isinstance(desc, PackageDescription): + self.short.extend(desc.short) + self.long.extend(desc.long) + else: + raise TypeError + + +class PackageRelation(list): + def __init__(self, value=None, override_arches=None): + if value: + self.extend(value, override_arches) + + def __str__(self): + return ', '.join(str(i) for i in self) + + def _search_value(self, value): + for i in self: + if i._search_value(value): + return i + return None + + def append(self, value, override_arches=None): + if isinstance(value, str): + value = PackageRelationGroup(value, override_arches) + elif not isinstance(value, PackageRelationGroup): + raise ValueError(u"got %s" % type(value)) + j = self._search_value(value) + if j: + j._update_arches(value) + else: + super(PackageRelation, self).append(value) + + def extend(self, value, override_arches=None): + if isinstance(value, str): + value = (j.strip() for j in re.split(',', value.strip())) + for i in value: + self.append(i, override_arches) + + +class PackageRelationGroup(list): + def __init__(self, value=None, override_arches=None): + if value: + self.extend(value, override_arches) + + def __str__(self): + return ' | '.join(str(i) for i in self) + + def _search_value(self, value): + for i, j in zip(self, value): + if i.name != j.name or i.operator != j.operator or \ + i.version != j.version or i.restrictions != j.restrictions: + return None + return self + + def _update_arches(self, value): + for i, j in zip(self, value): + if i.arches: + for arch in j.arches: + if arch not in i.arches: + i.arches.append(arch) + + def append(self, value, override_arches=None): + if isinstance(value, str): + value = PackageRelationEntry(value, override_arches) + elif not isinstance(value, PackageRelationEntry): + raise ValueError + super(PackageRelationGroup, self).append(value) + + def extend(self, value, override_arches=None): + if isinstance(value, str): + value = (j.strip() for j in re.split('\|', value.strip())) + for i in value: + self.append(i, override_arches) + + +class PackageRelationEntry(object): + __slots__ = "name", "operator", "version", "arches", "restrictions" + + _re = re.compile(r'^(\S+)(?: \((<<|<=|=|!=|>=|>>)\s*([^)]+)\))?(?: \[([^]]+)\])?(?: <([^>]+)>)?$') + + class _operator(object): + OP_LT = 1 + OP_LE = 2 + OP_EQ = 3 + OP_NE = 4 + OP_GE = 5 + OP_GT = 6 + + operators = { + '<<': OP_LT, + '<=': OP_LE, + '=': OP_EQ, + '!=': OP_NE, + '>=': OP_GE, + '>>': OP_GT, + } + + operators_neg = { + OP_LT: OP_GE, + OP_LE: OP_GT, + OP_EQ: OP_NE, + OP_NE: OP_EQ, + OP_GE: OP_LT, + OP_GT: OP_LE, + } + + operators_text = dict((b, a) for a, b in operators.items()) + + __slots__ = '_op', + + def __init__(self, value): + self._op = self.operators[value] + + def __neg__(self): + return self.__class__(self.operators_text[self.operators_neg[self._op]]) + + def __str__(self): + return self.operators_text[self._op] + + def __eq__(self, other): + return type(other) == type(self) and self._op == other._op + + def __init__(self, value=None, override_arches=None): + if not isinstance(value, str): + raise ValueError + + self.parse(value) + + if override_arches: + self.arches = list(override_arches) + + def __str__(self): + ret = [self.name] + if self.operator is not None and self.version is not None: + ret.extend((' (', str(self.operator), ' ', self.version, ')')) + if self.arches: + ret.extend((' [', ' '.join(self.arches), ']')) + if self.restrictions: + ret.extend((' <', ' '.join(self.restrictions), '>')) + return ''.join(ret) + + def parse(self, value): + match = self._re.match(value) + if match is None: + raise RuntimeError(u"Can't parse dependency %s" % value) + match = match.groups() + self.name = match[0] + if match[1] is not None: + self.operator = self._operator(match[1]) + else: + self.operator = None + self.version = match[2] + if match[3] is not None: + self.arches = re.split('\s+', match[3]) + else: + self.arches = [] + if match[4] is not None: + self.restrictions = re.split('\s+', match[4]) + else: + self.restrictions = [] + + +class _ControlFileDict(dict): + def __setitem__(self, key, value): + try: + cls = self._fields[key] + if not isinstance(value, cls): + value = cls(value) + except KeyError: + pass + super(_ControlFileDict, self).__setitem__(key, value) + + def keys(self): + keys = set(super(_ControlFileDict, self).keys()) + for i in self._fields.keys(): + if i in self: + keys.remove(i) + yield i + for i in sorted(list(keys)): + yield i + + def items(self): + for i in self.keys(): + yield (i, self[i]) + + def values(self): + for i in self.keys(): + yield self[i] + + +class Package(_ControlFileDict): + _fields = collections.OrderedDict(( + ('Package', str), + ('Source', str), + ('Architecture', PackageArchitecture), + ('Section', str), + ('Priority', str), + ('Maintainer', str), + ('Uploaders', str), + ('Standards-Version', str), + ('Build-Depends', PackageRelation), + ('Build-Depends-Arch', PackageRelation), + ('Build-Depends-Indep', PackageRelation), + ('Provides', PackageRelation), + ('Pre-Depends', PackageRelation), + ('Depends', PackageRelation), + ('Recommends', PackageRelation), + ('Suggests', PackageRelation), + ('Replaces', PackageRelation), + ('Breaks', PackageRelation), + ('Conflicts', PackageRelation), + ('Description', PackageDescription), + )) + + +class TestsControl(_ControlFileDict): + _fields = collections.OrderedDict(( + ('Tests', str), + ('Test-Command', str), + ('Restrictions', str), + ('Features', str), + ('Depends', PackageRelation), + ('Tests-Directory', str), + ('Classes', str), + )) diff --git a/lib/python/debian_linux/firmware.py b/lib/python/debian_linux/firmware.py new file mode 100644 index 0000000000..ece3743d39 --- /dev/null +++ b/lib/python/debian_linux/firmware.py @@ -0,0 +1,89 @@ +import re + + +class FirmwareFile(object): + def __init__(self, binary, desc=None, source=None, version=None): + self.binary = binary + self.desc = desc + self.source = source + self.version = version + + +class FirmwareSection(object): + def __init__(self, driver, files, licence): + self.driver = driver + self.files = files + self.licence = licence + + +class FirmwareWhence(list): + def __init__(self, file): + self.read(file) + + def read(self, file): + in_header = True + driver = None + files = {} + licence = None + binary = [] + desc = None + source = [] + version = None + + for line in file: + if line.startswith('----------'): + if in_header: + in_header = False + else: + # Finish old section + if driver: + self.append(FirmwareSection(driver, files, licence)) + driver = None + files = {} + licence = None + continue + + if in_header: + continue + + if line == '\n': + # End of field; end of file fields + for b in binary: + # XXX The WHENCE file isn't yet consistent in its + # association of binaries and their sources and + # metadata. This associates all sources and + # metadata in a group with each binary. + files[b] = FirmwareFile(b, desc, source, version) + binary = [] + desc = None + source = [] + version = None + continue + + match = re.match( + r'(Driver|File|Info|Licen[cs]e|Source|Version' + r'|Original licen[cs]e info(?:rmation)?):\s*(.*)\n', + line) + if match: + keyword, value = match.group(1, 2) + if keyword == 'Driver': + driver = value.split(' ')[0].lower() + elif keyword == 'File': + match = re.match(r'(\S+)(?:\s+--\s+(.*))?', value) + binary.append(match.group(1)) + desc = match.group(2) + elif keyword in ['Info', 'Version']: + version = value + elif keyword == 'Source': + source.append(value) + else: + licence = value + elif licence is not None: + licence = (licence + '\n' + + re.sub(r'^(?:[/ ]\*| \*/)?\s*(.*?)\s*$', r'\1', line)) + + # Finish last section if non-empty + for b in binary: + files[b] = FirmwareFile(b, desc, source, version) + if driver: + self.append(FirmwareSection(driver, files, licence)) diff --git a/lib/python/debian_linux/gencontrol.py b/lib/python/debian_linux/gencontrol.py new file mode 100644 index 0000000000..370dccb269 --- /dev/null +++ b/lib/python/debian_linux/gencontrol.py @@ -0,0 +1,355 @@ +import codecs +from collections import OrderedDict + +from .debian import * + + +class PackagesList(OrderedDict): + def append(self, package): + self[package['Package']] = package + + def extend(self, packages): + for package in packages: + self[package['Package']] = package + + +class Makefile(object): + def __init__(self): + self.rules = {} + self.add('.NOTPARALLEL') + + def add(self, name, deps=None, cmds=None): + if name in self.rules: + self.rules[name].add(deps, cmds) + else: + self.rules[name] = self.Rule(name, deps, cmds) + if deps is not None: + for i in deps: + if i not in self.rules: + self.rules[i] = self.Rule(i) + + def write(self, out): + for i in sorted(self.rules.keys()): + self.rules[i].write(out) + + class Rule(object): + def __init__(self, name, deps=None, cmds=None): + self.name = name + self.deps, self.cmds = set(), [] + self.add(deps, cmds) + + def add(self, deps=None, cmds=None): + if deps is not None: + self.deps.update(deps) + if cmds is not None: + self.cmds.append(cmds) + + def write(self, out): + deps_string = '' + if self.deps: + deps = list(self.deps) + deps.sort() + deps_string = ' ' + ' '.join(deps) + + if self.cmds: + if deps_string: + out.write('%s::%s\n' % (self.name, deps_string)) + for c in self.cmds: + out.write('%s::\n' % self.name) + for i in c: + out.write('\t%s\n' % i) + else: + out.write('%s:%s\n' % (self.name, deps_string)) + + +class MakeFlags(dict): + def __repr__(self): + repr = super(flags, self).__repr__() + return "%s(%s)" % (self.__class__.__name__, repr) + + def __str__(self): + return ' '.join("%s='%s'" % i for i in sorted(self.items())) + + def copy(self): + return self.__class__(super(MakeFlags, self).copy()) + + +class Gencontrol(object): + makefile_targets = ('binary-arch', 'build-arch', 'setup') + makefile_targets_indep = ('binary-indep', 'build-indep', 'setup') + + def __init__(self, config, templates, version=Version): + self.config, self.templates = config, templates + self.changelog = Changelog(version=version) + self.vars = {} + + def __call__(self): + packages = PackagesList() + makefile = Makefile() + + self.do_source(packages) + self.do_main(packages, makefile) + self.do_extra(packages, makefile) + + self.write(packages, makefile) + + def do_source(self, packages): + source = self.templates["control.source"][0] + source['Source'] = self.changelog[0].source + packages['source'] = self.process_package(source, self.vars) + + def do_main(self, packages, makefile): + config_entry = self.config['base', ] + vars = self.vars.copy() + + makeflags = MakeFlags() + extra = {} + + self.do_main_setup(vars, makeflags, extra) + self.do_main_makefile(makefile, makeflags, extra) + self.do_main_packages(packages, vars, makeflags, extra) + self.do_main_recurse(packages, makefile, vars, makeflags, extra) + + def do_main_setup(self, vars, makeflags, extra): + pass + + def do_main_makefile(self, makefile, makeflags, extra): + makefile.add('build-indep', cmds=["$(MAKE) -f debian/rules.real build-indep %s" % makeflags]) + makefile.add('binary-indep', cmds=["$(MAKE) -f debian/rules.real binary-indep %s" % makeflags]) + + def do_main_packages(self, packages, vars, makeflags, extra): + pass + + def do_main_recurse(self, packages, makefile, vars, makeflags, extra): + for featureset in self.config['base', ]['featuresets']: + if self.config.merge('base', None, featureset).get('enabled', True): + self.do_indep_featureset(packages, makefile, featureset, + vars.copy(), makeflags.copy(), extra) + for arch in iter(self.config['base', ]['arches']): + self.do_arch(packages, makefile, arch, vars.copy(), makeflags.copy(), extra) + + def do_extra(self, packages, makefile): + templates_extra = self.templates.get("control.extra", None) + if templates_extra is None: + return + + packages_extra = self.process_packages(templates_extra, self.vars) + packages.extend(packages_extra) + extra_arches = {} + for package in packages_extra: + arches = package['Architecture'] + for arch in arches: + i = extra_arches.get(arch, []) + i.append(package) + extra_arches[arch] = i + for arch in sorted(extra_arches.keys()): + cmds = [] + for i in extra_arches[arch]: + cmds.append("$(MAKE) -f debian/rules.real install-dummy ARCH='%s' DH_OPTIONS='-p%s'" % (arch, i['Package'])) + makefile.add('binary-arch_%s' % arch, ['binary-arch_%s_extra' % arch]) + makefile.add("binary-arch_%s_extra" % arch, cmds = cmds) + + def do_indep_featureset(self, packages, makefile, featureset, vars, + makeflags, extra): + vars['localversion'] = '' + if featureset != 'none': + vars['localversion'] = '-' + featureset + + self.do_indep_featureset_setup(vars, makeflags, featureset, extra) + self.do_indep_featureset_makefile(makefile, featureset, makeflags, + extra) + self.do_indep_featureset_packages(packages, makefile, featureset, + vars, makeflags, extra) + + def do_indep_featureset_setup(self, vars, makeflags, featureset, extra): + pass + + def do_indep_featureset_makefile(self, makefile, featureset, makeflags, + extra): + makeflags['FEATURESET'] = featureset + + for i in self.makefile_targets_indep: + target1 = i + target2 = '_'.join((target1, featureset)) + target3 = '_'.join((target2, 'real')) + makefile.add(target1, [target2]) + makefile.add(target2, [target3]) + + def do_indep_featureset_packages(self, packages, makefile, featureset, + vars, makeflags, extra): + pass + + def do_arch(self, packages, makefile, arch, vars, makeflags, extra): + vars['arch'] = arch + + self.do_arch_setup(vars, makeflags, arch, extra) + self.do_arch_makefile(makefile, arch, makeflags, extra) + self.do_arch_packages(packages, makefile, arch, vars, makeflags, extra) + self.do_arch_recurse(packages, makefile, arch, vars, makeflags, extra) + + def do_arch_setup(self, vars, makeflags, arch, extra): + pass + + def do_arch_makefile(self, makefile, arch, makeflags, extra): + makeflags['ARCH'] = arch + + for i in self.makefile_targets: + target1 = i + target2 = '_'.join((target1, arch)) + target3 = '_'.join((target2, 'real')) + makefile.add(target1, [target2]) + makefile.add(target2, [target3]) + + def do_arch_packages(self, packages, makefile, arch, vars, makeflags, extra): + pass + + def do_arch_recurse(self, packages, makefile, arch, vars, makeflags, extra): + for featureset in self.config['base', arch].get('featuresets', ()): + self.do_featureset(packages, makefile, arch, featureset, vars.copy(), makeflags.copy(), extra) + + def do_featureset(self, packages, makefile, arch, featureset, vars, makeflags, extra): + config_base = self.config.merge('base', arch, featureset) + if not config_base.get('enabled', True): + return + + vars['localversion'] = '' + if featureset != 'none': + vars['localversion'] = '-' + featureset + + self.do_featureset_setup(vars, makeflags, arch, featureset, extra) + self.do_featureset_makefile(makefile, arch, featureset, makeflags, extra) + self.do_featureset_packages(packages, makefile, arch, featureset, vars, makeflags, extra) + self.do_featureset_recurse(packages, makefile, arch, featureset, vars, makeflags, extra) + + def do_featureset_setup(self, vars, makeflags, arch, featureset, extra): + pass + + def do_featureset_makefile(self, makefile, arch, featureset, makeflags, extra): + makeflags['FEATURESET'] = featureset + + for i in self.makefile_targets: + target1 = '_'.join((i, arch)) + target2 = '_'.join((target1, featureset)) + target3 = '_'.join((target2, 'real')) + makefile.add(target1, [target2]) + makefile.add(target2, [target3]) + + def do_featureset_packages(self, packages, makefile, arch, featureset, vars, makeflags, extra): + pass + + def do_featureset_recurse(self, packages, makefile, arch, featureset, vars, makeflags, extra): + for flavour in self.config['base', arch, featureset]['flavours']: + self.do_flavour(packages, makefile, arch, featureset, flavour, vars.copy(), makeflags.copy(), extra) + + def do_flavour(self, packages, makefile, arch, featureset, flavour, vars, makeflags, extra): + config_base = self.config.merge('base', arch, featureset, flavour) + + vars['localversion'] += '-' + flavour + + self.do_flavour_setup(vars, makeflags, arch, featureset, flavour, extra) + self.do_flavour_makefile(makefile, arch, featureset, flavour, makeflags, extra) + self.do_flavour_packages(packages, makefile, arch, featureset, flavour, vars, makeflags, extra) + + def do_flavour_setup(self, vars, makeflags, arch, featureset, flavour, extra): + for i in ( + ('kernel-arch', 'KERNEL_ARCH'), + ('localversion', 'LOCALVERSION'), + ): + if i[0] in vars: + makeflags[i[1]] = vars[i[0]] + + def do_flavour_makefile(self, makefile, arch, featureset, flavour, makeflags, extra): + makeflags['FLAVOUR'] = flavour + + for i in self.makefile_targets: + target1 = '_'.join((i, arch, featureset)) + target2 = '_'.join((target1, flavour)) + target3 = '_'.join((target2, 'real')) + makefile.add(target1, [target2]) + makefile.add(target2, [target3]) + + def do_flavour_packages(self, packages, makefile, arch, featureset, flavour, vars, makeflags, extra): + pass + + def process_relation(self, dep, vars): + import copy + dep = copy.deepcopy(dep) + for groups in dep: + for item in groups: + item.name = self.substitute(item.name, vars) + if item.version: + item.version = self.substitute(item.version, vars) + return dep + + def process_description(self, in_desc, vars): + desc = in_desc.__class__() + desc.short = self.substitute(in_desc.short, vars) + for i in in_desc.long: + desc.append(self.substitute(i, vars)) + return desc + + def process_package(self, in_entry, vars={}): + entry = in_entry.__class__() + for key, value in in_entry.items(): + if isinstance(value, PackageRelation): + value = self.process_relation(value, vars) + elif isinstance(value, PackageDescription): + value = self.process_description(value, vars) + else: + value = self.substitute(value, vars) + entry[key] = value + return entry + + def process_packages(self, entries, vars): + return [self.process_package(i, vars) for i in entries] + + def substitute(self, s, vars): + if isinstance(s, (list, tuple)): + return [self.substitute(i, vars) for i in s] + + def subst(match): + return vars[match.group(1)] + + return re.sub(r'@([-_a-z0-9]+)@', subst, str(s)) + + def write(self, packages, makefile): + self.write_control(packages.values()) + self.write_makefile(makefile) + + def write_config(self): + f = file("debian/config.dump", 'w') + self.config.write(f) + f.close() + + def write_control(self, list): + self.write_rfc822(codecs.open("debian/control", 'w', 'utf-8'), list) + + def write_makefile(self, makefile): + f = open("debian/rules.gen", 'w') + makefile.write(f) + f.close() + + def write_rfc822(self, f, list): + for entry in list: + for key, value in entry.items(): + f.write(u"%s: %s\n" % (key, value)) + f.write('\n') + +def merge_packages(packages, new, arch): + for new_package in new: + name = new_package['Package'] + if name in packages: + package = packages.get(name) + package['Architecture'].add(arch) + + for field in 'Depends', 'Provides', 'Suggests', 'Recommends', 'Conflicts': + if field in new_package: + if field in package: + v = package[field] + v.extend(new_package[field]) + else: + package[field] = new_package[field] + + else: + new_package['Architecture'] = arch + packages.append(new_package) diff --git a/lib/python/debian_linux/kconfig.py b/lib/python/debian_linux/kconfig.py new file mode 100644 index 0000000000..67309e3a07 --- /dev/null +++ b/lib/python/debian_linux/kconfig.py @@ -0,0 +1,91 @@ +from collections import OrderedDict + +__all__ = ( + "KconfigFile", +) + + +class KConfigEntry(object): + __slots__ = 'name', 'value', 'comments' + + def __init__(self, name, value, comments=None): + self.name, self.value = name, value + self.comments = comments or [] + + def __eq__(self, other): + return self.name == other.name and self.value == other.value + + def __hash__(self): + return hash(self.name) | hash(self.value) + + def __repr__(self): + return '<{}({!r}, {!r}, {!r})>'.format(self.__class__.__name__, self.name, self.value, self.comments) + + def __str__(self): + return 'CONFIG_{}={}'.format(self.name, self.value) + + def write(self): + for comment in self.comments: + yield '#. ' + comment + yield str(self) + + +class KConfigEntryTristate(KConfigEntry): + __slots__ = () + + VALUE_NO = False + VALUE_YES = True + VALUE_MOD = object() + + def __init__(self, name, value, comments=None): + if value == 'n' or value is None: + value = self.VALUE_NO + elif value == 'y': + value = self.VALUE_YES + elif value == 'm': + value = self.VALUE_MOD + else: + raise NotImplementedError + super(KConfigEntryTristate, self).__init__(name, value, comments) + + def __str__(self): + if self.value is self.VALUE_MOD: + return 'CONFIG_{}=m'.format(self.name) + if self.value: + return 'CONFIG_{}=y'.format(self.name) + return '# CONFIG_{} is not set'.format(self.name) + + +class KconfigFile(OrderedDict): + def __str__(self): + ret = [] + for i in self.str_iter(): + ret.append(i) + return '\n'.join(ret) + '\n' + + def read(self, f): + for line in iter(f.readlines()): + line = line.strip() + if line.startswith("CONFIG_"): + i = line.find('=') + option = line[7:i] + value = line[i + 1:] + self.set(option, value) + elif line.startswith("# CONFIG_"): + option = line[9:-11] + self.set(option, 'n') + elif line.startswith("#") or not line: + pass + else: + raise RuntimeError("Can't recognize %s" % line) + + def set(self, key, value): + if value in ('y', 'm', 'n'): + entry = KConfigEntryTristate(key, value) + else: + entry = KConfigEntry(key, value) + self[key] = entry + + def str_iter(self): + for key, value in self.items(): + yield str(value) diff --git a/lib/python/debian_linux/patches.py b/lib/python/debian_linux/patches.py new file mode 100644 index 0000000000..984e48f0ed --- /dev/null +++ b/lib/python/debian_linux/patches.py @@ -0,0 +1,180 @@ +from __future__ import print_function + +import glob +import os +import shutil +import subprocess + + +class Operation(object): + def __init__(self, name, data): + self.name, self.data = name, data + + def __call__(self, dir='.', reverse=False): + try: + if not reverse: + self.do(dir) + else: + self.do_reverse(dir) + self._log(True) + except: + self._log(False) + raise + + def _log(self, result): + if result: + s = "OK" + else: + s = "FAIL" + print(""" (%s) %-4s %s""" % (self.operation, s, self.name)) + + def do(self, dir): + raise NotImplementedError + + def do_reverse(self, dir): + raise NotImplementedError + + +class OperationPatch(Operation): + def __init__(self, name, filename, data): + super(OperationPatch, self).__init__(name, data) + self.filename = filename + + def _call(self, dir, *extraargs): + with open(self.filename) as f: + subprocess.check_call( + ("patch", "-p1", "-f", "-s", "-t", "--no-backup-if-mismatch") + extraargs, + cwd=dir, + stdin=f, + ) + + def patch_push(self, dir): + self._call(dir, '--fuzz=1') + + def patch_pop(self, dir): + self._call(dir, '-R') + + +class OperationPatchPush(OperationPatch): + operation = '+' + + do = OperationPatch.patch_push + do_reverse = OperationPatch.patch_pop + + +class OperationPatchPop(OperationPatch): + operation = '-' + + do = OperationPatch.patch_pop + do_reverse = OperationPatch.patch_push + + +class SubOperation(Operation): + def _log(self, result): + if result: + s = "OK" + else: + s = "FAIL" + print(""" %-10s %-4s %s""" % ('(%s)' % self.operation, s, self.name)) + + +class SubOperationFilesRemove(SubOperation): + operation = "remove" + + def do(self, dir): + name = os.path.join(dir, self.name) + for n in glob.iglob(name): + if os.path.isdir(n): + shutil.rmtree(n) + else: + os.unlink(n) + + +class SubOperationFilesUnifdef(SubOperation): + operation = "unifdef" + + def do(self, dir): + filename = os.path.join(dir, self.name) + ret = subprocess.call(("unifdef", "-o", filename, filename) + tuple(self.data)) + if ret == 0: + raise RuntimeError("unifdef of %s removed nothing" % self.name) + elif ret != 1: + raise RuntimeError("unifdef failed") + + +class OperationFiles(Operation): + operation = 'X' + + suboperations = { + 'remove': SubOperationFilesRemove, + 'rm': SubOperationFilesRemove, + 'unifdef': SubOperationFilesUnifdef, + } + + def __init__(self, name, filename, data): + super(OperationFiles, self).__init__(name, data) + + ops = [] + + with open(filename) as f: + for line in f: + line = line.strip() + if not line or line[0] == '#': + continue + + items = line.split() + operation, filename = items[:2] + data = items[2:] + + if operation not in self.suboperations: + raise RuntimeError('Undefined operation "%s" in series %s' % (operation, name)) + + ops.append(self.suboperations[operation](filename, data)) + + self.ops = ops + + def do(self, dir): + for i in self.ops: + i(dir=dir) + + +class PatchSeries(list): + operations = { + '+': OperationPatchPush, + '-': OperationPatchPop, + 'X': OperationFiles, + } + + def __init__(self, name, root, fp): + self.name, self.root = name, root + + for line in fp: + line = line.strip() + + if not len(line) or line[0] == '#': + continue + + items = line.split(' ') + operation, filename = items[:2] + data = items[2:] + + if operation in self.operations: + f = os.path.join(self.root, filename) + if os.path.exists(f): + self.append(self.operations[operation](filename, f, data)) + else: + raise RuntimeError("Can't find patch %s for series %s" % (filename, self.name)) + else: + raise RuntimeError('Undefined operation "%s" in series %s' % (operation, name)) + + def __call__(self, cond=bool, dir='.', reverse=False): + if not reverse: + l = self + else: + l = self[::-1] + for i in l: + if cond(i): + i(dir=dir, reverse=reverse) + + def __repr__(self): + return '<%s object for %s>' % (self.__class__.__name__, self.name) diff --git a/lib/python/debian_linux/utils.py b/lib/python/debian_linux/utils.py new file mode 100644 index 0000000000..5d6a7d4730 --- /dev/null +++ b/lib/python/debian_linux/utils.py @@ -0,0 +1,93 @@ +import codecs +import os +import re +import textwrap + + +class Templates(object): + def __init__(self, dirs=["debian/templates"]): + self.dirs = dirs + + self._cache = {} + + def __getitem__(self, key): + ret = self.get(key) + if ret is not None: + return ret + raise KeyError(key) + + def _read(self, name): + prefix, id = name.split('.', 1) + + for suffix in ['.in', '']: + for dir in self.dirs: + filename = "%s/%s%s" % (dir, name, suffix) + if os.path.exists(filename): + f = codecs.open(filename, 'r', 'utf-8') + if prefix == 'control': + return read_control(f) + if prefix == 'tests-control': + return read_tests_control(f) + return f.read() + + def get(self, key, default=None): + if key in self._cache: + return self._cache[key] + + value = self._cache.setdefault(key, self._read(key)) + if value is None: + return default + return value + + +def read_control(f): + from .debian import Package + return _read_rfc822(f, Package) + +def read_tests_control(f): + from .debian import TestsControl + return _read_rfc822(f, TestsControl) + +def _read_rfc822(f, cls): + entries = [] + eof = False + + while not eof: + e = cls() + last = None + lines = [] + while True: + line = f.readline() + if not line: + eof = True + break + # Strip comments rather than trying to preserve them + if line[0] == '#': + continue + line = line.strip('\n') + if not line: + break + if line[0] in ' \t': + if not last: + raise ValueError('Continuation line seen before first header') + lines.append(line.lstrip()) + continue + if last: + e[last] = '\n'.join(lines) + i = line.find(':') + if i < 0: + raise ValueError(u"Not a header, not a continuation: ``%s''" % line) + last = line[:i] + lines = [line[i + 1:].lstrip()] + if last: + e[last] = '\n'.join(lines) + if e: + entries.append(e) + + return entries + + +class TextWrapper(textwrap.TextWrapper): + wordsep_re = re.compile( + r'(\s+|' # any whitespace + r'(?<=[\w\!\"\'\&\.\,\?])-{2,}(?=\w))') # em-dash diff --git a/lib/python/debian_xen/__init__.py b/lib/python/debian_xen/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lib/python/debian_xen/debian.py b/lib/python/debian_xen/debian.py new file mode 100644 index 0000000000..7c6c47d254 --- /dev/null +++ b/lib/python/debian_xen/debian.py @@ -0,0 +1,52 @@ +import re +from debian_linux.debian import Version + + +class VersionXen(Version): + _version_xen_rules = r""" + ^ + (?P\d+)\.(?P\d+)(?:\.(?P\d+))? + (?: + ~pre(?:\+\d+\.(?P[0-9a-f]{10})) + | + ~rc(?P\d+)(?:\+\d+\.(?P[0-9a-f]{10}))? + )? + - + (?P[^-]+) + $ + """ + _version_xen_re = re.compile(_version_xen_rules, re.X) + + def __init__(self, version): + super(VersionXen, self).__init__(version) + match = self._version_xen_re.match(version) + if match is None: + raise ValueError("Invalid debian xen version") + d = match.groupdict() + self.major = d['major'] + self.minor = d['minor'] + self.xen_version = '%s.%s' % (self.major, self.minor) + self.patch = d['patch'] + self.pre_commit = d['pre_commit'] + self.rc_commit = d['rc_commit'] + self.rc = d['rc'] + self.debian_revision = d['debian_revision'] + + # Now find out which treeish in the upstream source we need to build + # the orig tar from. + + # 1. pre version in between stable releases with explicit commit + # e.g. 4.10.2~pre+1.25e0657ed4-1 + if self.pre_commit is not None: + self.treeish = self.pre_commit + # 2. explicit commit while in rc + # e.g. 4.11.0~rc6+1.35fcb982ea-1~exp1 + elif self.rc_commit is not None: + self.treeish = self.rc_commit + # 3. release candidate + # e.g. 4.11.0~rc7-1~exp1 + elif self.rc is not None: + self.treeish = '%s.%s.%s-rc%s' % (self.major, self.minor, self.patch, self.rc) + # 4. regular release, like 4.10.2 -> tag RELEASE-4.10.2 + else: + self.treeish = 'RELEASE-%s.%s.%s' % (self.major, self.minor, self.patch) diff --git a/libxen-dev.install b/libxen-dev.install new file mode 100644 index 0000000000..473a9157fa --- /dev/null +++ b/libxen-dev.install @@ -0,0 +1,46 @@ +usr/lib/*/libxenctrl.a +usr/lib/*/libxenctrl.so +usr/lib/*/libxenguest.a +usr/lib/*/libxenguest.so +usr/lib/*/libxenlight.a +usr/lib/*/libxenlight.so +usr/lib/*/libxenstore.a +usr/lib/*/libxenstore.so +usr/lib/*/libxlutil.a +usr/lib/*/libxlutil.so +usr/lib/*/libxencall.a +usr/lib/*/libxencall.so +usr/lib/*/libxenevtchn.a +usr/lib/*/libxenevtchn.so +usr/lib/*/libxenforeignmemory.a +usr/lib/*/libxenforeignmemory.so +usr/lib/*/libxengnttab.a +usr/lib/*/libxengnttab.so +usr/lib/*/libxentoollog.a +usr/lib/*/libxentoollog.so +usr/lib/*/libxendevicemodel.a +usr/lib/*/libxendevicemodel.so +usr/lib/*/libxentoolcore.a +usr/lib/*/libxentoolcore.so +usr/include/_libxl*.h +usr/include/libxl*.h +usr/include/xenctrl.h +usr/include/xenguest.h +usr/include/xenstore*.h +usr/include/xenstore-compat/xs* usr/include +usr/include/xentoolcore.h +usr/include/xentoollog.h +usr/include/xendevicemodel.h +usr/include/xen +usr/lib/*/pkgconfig/*.pc +# New headers in xen-4.8 +#usr/include/fsimage_grub.h +#usr/include/fsimage.h +#usr/include/fsimage_plugin.h +#usr/include/libxenvchan.h +usr/include/xencall.h +usr/include/xenctrl_compat.h +usr/include/xenevtchn.h +usr/include/xenforeignmemory.h +usr/include/xengnttab.h +usr/include/xenstat.h diff --git a/libxenstore3.0.install b/libxenstore3.0.install new file mode 100644 index 0000000000..1d3fabc1df --- /dev/null +++ b/libxenstore3.0.install @@ -0,0 +1,2 @@ +usr/lib/*/libxenstore.so.* +usr/lib/*/libxentoolcore*.so.* diff --git a/libxenstore3.0.symbols b/libxenstore3.0.symbols new file mode 100644 index 0000000000..508dfb48e3 --- /dev/null +++ b/libxenstore3.0.symbols @@ -0,0 +1,53 @@ +libxenstore.so.3.0 libxenstore3.0 #MINVER# + expanding_buffer_ensure@Base 3.2.0 + sanitise_value@Base 3.2.0 + unsanitise_value@Base 3.2.0 + xprintf@Base 3.2.0 + xs_check_watch@Base 4.2~ + xs_close@Base 4.1.0~rc6 + xs_control_command@Base 4.9.0 + xs_count_strings@Base 3.2.0 + xs_daemon_close@Base 3.2.0 + xs_daemon_destroy_postfork@Base 4.0.1~rc4 + xs_daemon_open@Base 3.2.0 + xs_daemon_open_readonly@Base 3.2.0 + xs_daemon_rootdir@Base 3.2.0 + xs_daemon_rundir@Base 3.2.0 + xs_daemon_socket@Base 3.2.0 + xs_daemon_socket_ro@Base 3.2.0 + xs_daemon_tdb@Base 3.2.0 + xs_debug_command@Base 3.2.0 + xs_directory@Base 3.2.0 + xs_domain_dev@Base 3.2.0 + xs_domain_open@Base 3.2.0 + xs_fileno@Base 3.2.0 + xs_get_domain_path@Base 3.2.0 + xs_get_permissions@Base 3.2.0 + xs_introduce_domain@Base 3.2.0 + xs_is_domain_introduced@Base 3.2.0 + xs_mkdir@Base 3.2.0 + xs_open@Base 4.1.0~rc6 + xs_path_is_subpath@Base 4.2~ + xs_perm_to_string@Base 3.2.0 + xs_read@Base 3.2.0 + xs_read_watch@Base 3.2.0 + xs_release_domain@Base 3.2.0 + xs_restrict@Base 4.1.0~rc6 + xs_resume_domain@Base 3.2.0 + xs_rm@Base 3.2.0 + xs_set_permissions@Base 3.2.0 + xs_set_target@Base 3.4.0 + xs_strings_to_perms@Base 3.2.0 + xs_suspend_evtchn_port@Base 3.4.0 + xs_transaction_end@Base 3.2.0 + xs_transaction_start@Base 3.2.0 + xs_unwatch@Base 3.2.0 + xs_watch@Base 3.2.0 + xs_write@Base 3.2.0 + xs_write_all@Base 3.2.0 +libxentoolcore-4.10.so.1 libxenstore3.0 #MINVER# + VERS_1.0@VERS_1.0 4.10.0 + xentoolcore__deregister_active_handle@VERS_1.0 4.10.0 + xentoolcore__register_active_handle@VERS_1.0 4.10.0 + xentoolcore__restrict_by_dup2_null@VERS_1.0 4.10.0 + xentoolcore_restrict_all@VERS_1.0 4.10.0 diff --git a/patches/misc/tools-include-install.diff b/patches/misc/tools-include-install.diff new file mode 100644 index 0000000000..f19c066aa3 --- /dev/null +++ b/patches/misc/tools-include-install.diff @@ -0,0 +1,26 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:47:30 +0200 +Subject: tools-include-install.diff + +Patch-Name: tools-include-install.diff + +--- + +--- a/tools/include/Makefile ++++ b/tools/include/Makefile +@@ -14,7 +14,6 @@ xen-foreign: + xen/.dir: + @rm -rf xen + mkdir -p xen/libelf +- ln -sf $(XEN_ROOT)/xen/include/public/COPYING xen + ln -sf $(wildcard $(XEN_ROOT)/xen/include/public/*.h) xen + ln -sf $(addprefix $(XEN_ROOT)/xen/include/public/,arch-x86 arch-arm hvm io xsm) xen + ln -sf ../xen-sys/$(XEN_OS) xen/sys +@@ -43,7 +42,6 @@ install: all + $(INSTALL_DIR) $(DESTDIR)$(includedir)/xen/io + $(INSTALL_DIR) $(DESTDIR)$(includedir)/xen/sys + $(INSTALL_DIR) $(DESTDIR)$(includedir)/xen/xsm +- $(INSTALL_DATA) xen/COPYING $(DESTDIR)$(includedir)/xen + $(INSTALL_DATA) xen/*.h $(DESTDIR)$(includedir)/xen + $(INSTALL_DATA) xen/arch-x86/*.h $(DESTDIR)$(includedir)/xen/arch-x86 + $(INSTALL_DATA) xen/arch-x86/hvm/*.h $(DESTDIR)$(includedir)/xen/arch-x86/hvm diff --git a/patches/misc/tools-pygrub-remove-static-solaris-support b/patches/misc/tools-pygrub-remove-static-solaris-support new file mode 100644 index 0000000000..23e74a272d --- /dev/null +++ b/patches/misc/tools-pygrub-remove-static-solaris-support @@ -0,0 +1,82 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:47:29 +0200 +Subject: Remove static solaris support from pygrub + +Patch-Name: tools-pygrub-remove-static-solaris-support + +--- + +--- a/tools/pygrub/src/pygrub ++++ b/tools/pygrub/src/pygrub +@@ -16,7 +16,6 @@ import os, sys, string, struct, tempfile + import copy + import logging + import platform +-import xen.lowlevel.xc + + import curses, _curses, curses.wrapper, curses.textpad, curses.ascii + import getopt +@@ -668,51 +667,6 @@ def run_grub(file, entry, fs, cfg_args): + + return grubcfg + +-def supports64bitPVguest(): +- xc = xen.lowlevel.xc.xc() +- caps = xc.xeninfo()['xen_caps'].split(" ") +- for cap in caps: +- if cap == "xen-3.0-x86_64": +- return True +- return False +- +-# If nothing has been specified, look for a Solaris domU. If found, perform the +-# necessary tweaks. +-def sniff_solaris(fs, cfg): +- if not fs.file_exists("/platform/i86xpv/kernel/unix") and \ +- not fs.file_exists("/platform/i86xpv/kernel/amd64/unix"): +- return cfg +- +- if not cfg["kernel"]: +- if supports64bitPVguest() and \ +- fs.file_exists("/platform/i86xpv/kernel/amd64/unix"): +- cfg["kernel"] = "/platform/i86xpv/kernel/amd64/unix" +- cfg["ramdisk"] = "/platform/i86pc/amd64/boot_archive" +- elif fs.file_exists("/platform/i86xpv/kernel/unix"): +- cfg["kernel"] = "/platform/i86xpv/kernel/unix" +- cfg["ramdisk"] = "/platform/i86pc/boot_archive" +- else: +- return cfg +- +- # Unpleasant. Typically we'll have 'root=foo -k' or 'root=foo /kernel -k', +- # and we need to maintain Xen properties (root= and ip=) and the kernel +- # before any user args. +- +- xenargs = "" +- userargs = "" +- +- if not cfg["args"]: +- cfg["args"] = cfg["kernel"] +- else: +- for arg in cfg["args"].split(): +- if re.match("^root=", arg) or re.match("^ip=", arg): +- xenargs += arg + " " +- elif arg != cfg["kernel"]: +- userargs += arg + " " +- cfg["args"] = xenargs + " " + cfg["kernel"] + " " + userargs +- +- return cfg +- + def sniff_netware(fs, cfg): + if not fs.file_exists("/nwserver/xnloader.sys"): + return cfg +@@ -901,10 +855,7 @@ if __name__ == "__main__": + try: + fs = fsimage.open(file, offset, bootfsoptions) + +- chosencfg = sniff_solaris(fs, incfg) +- +- if not chosencfg["kernel"]: +- chosencfg = sniff_netware(fs, incfg) ++ chosencfg = sniff_netware(fs, incfg) + + if not chosencfg["kernel"]: + chosencfg = run_grub(file, entry, fs, incfg["args"]) diff --git a/patches/misc/tools-xenmon-install.diff b/patches/misc/tools-xenmon-install.diff new file mode 100644 index 0000000000..e9120bfd86 --- /dev/null +++ b/patches/misc/tools-xenmon-install.diff @@ -0,0 +1,21 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:47:31 +0200 +Subject: tools-xenmon-install.diff + +Patch-Name: tools-xenmon-install.diff + +--- + +--- a/tools/xenmon/Makefile ++++ b/tools/xenmon/Makefile +@@ -13,6 +13,10 @@ + XEN_ROOT=$(CURDIR)/../.. + include $(XEN_ROOT)/tools/Rules.mk + ++DEFAULT_PYTHON_PATH := $(shell $(XEN_ROOT)/tools/python/get-path) ++PYTHON_PATH ?= $(DEFAULT_PYTHON_PATH) ++INSTALL_PYTHON_PROG = $(XEN_ROOT)/tools/python/install-wrap "$(PYTHON_PATH)" $(INSTALL_PROG) ++ + CFLAGS += -Werror + CFLAGS += $(CFLAGS_libxenevtchn) + CFLAGS += $(CFLAGS_libxenctrl) diff --git a/patches/misc/tools-xentop-replace-use-of-deprecated-vwprintw.patch b/patches/misc/tools-xentop-replace-use-of-deprecated-vwprintw.patch new file mode 100644 index 0000000000..367548e946 --- /dev/null +++ b/patches/misc/tools-xentop-replace-use-of-deprecated-vwprintw.patch @@ -0,0 +1,35 @@ +From 754457cf86fd952cab83534f0a2db14eddaecca2 Mon Sep 17 00:00:00 2001 +From: Christopher Clark +Date: Wed, 18 Jul 2018 15:22:17 -0700 +Subject: [PATCH] tools/xentop : replace use of deprecated vwprintw + +gcc-8.1 complains: + +| xentop.c: In function 'print': +| xentop.c:304:4: error: 'vwprintw' is deprecated [-Werror=deprecated-declarations] +| vwprintw(stdscr, (curses_str_t)fmt, args); +| ^~~~~~~~ + +vw_printw (note the underscore) is a non-deprecated alternative. + +Signed-off-by: Christopher Clark +--- + tools/xenstat/xentop/xentop.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/xenstat/xentop/xentop.c b/tools/xenstat/xentop/xentop.c +index 2fd2b6742e..c46581062b 100644 +--- a/tools/xenstat/xentop/xentop.c ++++ b/tools/xenstat/xentop/xentop.c +@@ -301,7 +301,7 @@ static void print(const char *fmt, ...) + if (!batch) { + if((current_row() < lines()-1)) { + va_start(args, fmt); +- vwprintw(stdscr, (curses_str_t)fmt, args); ++ vw_printw(stdscr, (curses_str_t)fmt, args); + va_end(args); + } + } else { +-- +2.18.0 + diff --git a/patches/misc/toolstestsx86_emulator-pass--no-pie--fno.patch b/patches/misc/toolstestsx86_emulator-pass--no-pie--fno.patch new file mode 100644 index 0000000000..62019c56c9 --- /dev/null +++ b/patches/misc/toolstestsx86_emulator-pass--no-pie--fno.patch @@ -0,0 +1,47 @@ +From: Ian Jackson +Date: Tue, 1 Nov 2016 16:20:27 +0000 +Subject: tools/tests/x86_emulator: Pass -no-pie -fno-pic to gcc on x86_32 + +The current build fails with GCC6 on Debian sid i386 (unstable): + + /tmp/ccqjaueF.s: Assembler messages: + /tmp/ccqjaueF.s:3713: Error: missing or invalid displacement expression `vmovd_to_reg_len@GOT' + +This is due to the combination of GCC6, and Debian's decision to +enable some hardening flags by default (to try to make runtime +addresses less predictable): + https://wiki.debian.org/Hardening/PIEByDefaultTransition + +This is of no benefit for the x86 instruction emulator test, which is +a rebuild of the emulator code for testing purposes only. So pass +options to disable this. + +These options will be no-ops if they are the same as the compiler +default. + +On amd64, the -fno-pic breaks the build in a different way. So do +this only on i386. + +Signed-off-by: Ian Jackson +CC: Jan Beulich +CC: Andrew Cooper + +squash! tools/tests/x86_emulator: Pass -no-pie -fno-pic to gcc + +Signed-off-by: Ian Jackson + +--- + +--- a/tools/tests/x86_emulator/Makefile ++++ b/tools/tests/x86_emulator/Makefile +@@ -140,6 +140,10 @@ HOSTCFLAGS-x86_64 := -fno-PIE + $(call cc-option-add,HOSTCFLAGS-x86_64,HOSTCC,-no-pie) + HOSTCFLAGS += $(CFLAGS_xeninclude) -I. $(HOSTCFLAGS-$(XEN_COMPILE_ARCH)) + ++ifeq ($(XEN_TARGET_ARCH),x86_32) ++HOSTCFLAGS += -no-pie -fno-pic ++endif ++ + x86.h := asm/x86-vendors.h asm/x86-defns.h asm/msr-index.h + x86_emulate.h := x86-emulate.h x86_emulate/x86_emulate.h $(x86.h) + diff --git a/patches/misc/version.diff b/patches/misc/version.diff new file mode 100644 index 0000000000..7178674da6 --- /dev/null +++ b/patches/misc/version.diff @@ -0,0 +1,147 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:46:43 +0200 +Subject: version + +Patch-Name: version.diff + +--- + +--- a/xen/Makefile ++++ b/xen/Makefile +@@ -161,7 +161,7 @@ delete-unfresh-files: + @mv -f $@.tmp $@ + + # compile.h contains dynamic build info. Rebuilt on every 'make' invocation. +-include/xen/compile.h: include/xen/compile.h.in .banner ++include/xen/compile.h: include/xen/compile.h.in + @sed -e 's/@@date@@/$(XEN_BUILD_DATE)/g' \ + -e 's/@@time@@/$(XEN_BUILD_TIME)/g' \ + -e 's/@@whoami@@/$(XEN_WHOAMI)/g' \ +@@ -172,9 +172,11 @@ include/xen/compile.h: include/xen/compi + -e 's/@@subversion@@/$(XEN_SUBVERSION)/g' \ + -e 's/@@extraversion@@/$(XEN_EXTRAVERSION)/g' \ + -e 's!@@changeset@@!$(shell tools/scmversion $(XEN_ROOT) || echo "unavailable")!g' \ ++ -e 's/@@system_distribution@@/$(shell lsb_release -is)/g' \ ++ -e 's/@@system_maintainer_domain@@/$(shell cd ../../../..; dpkg-parsechangelog | sed -ne 's,^Maintainer: .[^<]*<[^@>]*@\([^>]*\)>,\1,p')/g' \ ++ -e 's/@@system_maintainer_local@@/$(shell cd ../../../..; dpkg-parsechangelog | sed -ne 's,^Maintainer: .[^<]*<\([^@>]*\)@.*>,\1,p')/g' \ ++ -e 's/@@system_version@@/$(shell cd ../../../..; dpkg-parsechangelog | awk '/^Version:/ {print $$2}')/g' \ + < include/xen/compile.h.in > $@.new +- @cat .banner +- @$(PYTHON) tools/fig-to-oct.py < .banner >> $@.new + @mv -f $@.new $@ + + include/asm-$(TARGET_ARCH)/asm-offsets.h: arch/$(TARGET_ARCH)/asm-offsets.s +--- a/xen/common/kernel.c ++++ b/xen/common/kernel.c +@@ -357,8 +357,8 @@ DO(xen_version)(int cmd, XEN_GUEST_HANDL + + memset(&info, 0, sizeof(info)); + safe_strcpy(info.compiler, deny ? xen_deny() : xen_compiler()); +- safe_strcpy(info.compile_by, deny ? xen_deny() : xen_compile_by()); +- safe_strcpy(info.compile_domain, deny ? xen_deny() : xen_compile_domain()); ++ safe_strcpy(info.compile_by, deny ? xen_deny() : xen_compile_system_maintainer_local()); ++ safe_strcpy(info.compile_domain, deny ? xen_deny() : xen_compile_system_maintainer_domain()); + safe_strcpy(info.compile_date, deny ? xen_deny() : xen_compile_date()); + if ( copy_to_guest(arg, &info, 1) ) + return -EFAULT; +--- a/xen/common/version.c ++++ b/xen/common/version.c +@@ -20,19 +20,24 @@ const char *xen_compile_time(void) + return XEN_COMPILE_TIME; + } + +-const char *xen_compile_by(void) ++const char *xen_compile_system_distribution(void) + { +- return XEN_COMPILE_BY; ++ return XEN_COMPILE_SYSTEM_DISTRIBUTION; + } + +-const char *xen_compile_domain(void) ++const char *xen_compile_system_maintainer_local(void) + { +- return XEN_COMPILE_DOMAIN; ++ return XEN_COMPILE_SYSTEM_MAINTAINER_LOCAL; + } + +-const char *xen_compile_host(void) ++const char *xen_compile_system_maintainer_domain(void) + { +- return XEN_COMPILE_HOST; ++ return XEN_COMPILE_SYSTEM_MAINTAINER_DOMAIN; ++} ++ ++const char *xen_compile_system_version(void) ++{ ++ return XEN_COMPILE_SYSTEM_VERSION; + } + + const char *xen_compiler(void) +@@ -60,11 +65,6 @@ const char *xen_changeset(void) + return XEN_CHANGESET; + } + +-const char *xen_banner(void) +-{ +- return XEN_BANNER; +-} +- + const char *xen_deny(void) + { + return ""; +--- a/xen/drivers/char/console.c ++++ b/xen/drivers/char/console.c +@@ -842,14 +842,11 @@ void __init console_init_preirq(void) + pv_console_set_rx_handler(serial_rx); + + /* HELLO WORLD --- start-of-day banner text. */ +- spin_lock(&console_lock); +- __putstr(xen_banner()); +- spin_unlock(&console_lock); +- printk("Xen version %d.%d%s (%s@%s) (%s) debug=%c " gcov_string " %s\n", ++ printk("Xen version %d.%d%s (%s %s) (%s@%s) (%s) debug=%c " gcov_string " %s\n", + xen_major_version(), xen_minor_version(), xen_extra_version(), +- xen_compile_by(), xen_compile_domain(), ++ xen_compile_system_distribution(), xen_compile_system_version(), ++ xen_compile_system_maintainer_local(), xen_compile_system_maintainer_domain(), + xen_compiler(), debug_build() ? 'y' : 'n', xen_compile_date()); +- printk("Latest ChangeSet: %s\n", xen_changeset()); + + if ( opt_sync_console ) + { +--- a/xen/include/xen/compile.h.in ++++ b/xen/include/xen/compile.h.in +@@ -1,8 +1,9 @@ + #define XEN_COMPILE_DATE "@@date@@" + #define XEN_COMPILE_TIME "@@time@@" +-#define XEN_COMPILE_BY "@@whoami@@" +-#define XEN_COMPILE_DOMAIN "@@domain@@" +-#define XEN_COMPILE_HOST "@@hostname@@" ++#define XEN_COMPILE_SYSTEM_DISTRIBUTION "@@system_distribution@@" ++#define XEN_COMPILE_SYSTEM_MAINTAINER_DOMAIN "@@system_maintainer_domain@@" ++#define XEN_COMPILE_SYSTEM_MAINTAINER_LOCAL "@@system_maintainer_local@@" ++#define XEN_COMPILE_SYSTEM_VERSION "@@system_version@@" + #define XEN_COMPILER "@@compiler@@" + + #define XEN_VERSION @@version@@ +@@ -10,4 +11,3 @@ + #define XEN_EXTRAVERSION "@@extraversion@@" + + #define XEN_CHANGESET "@@changeset@@" +-#define XEN_BANNER \ +--- a/xen/include/xen/version.h ++++ b/xen/include/xen/version.h +@@ -6,9 +6,10 @@ + + const char *xen_compile_date(void); + const char *xen_compile_time(void); +-const char *xen_compile_by(void); +-const char *xen_compile_domain(void); +-const char *xen_compile_host(void); ++const char *xen_compile_system_distribution(void); ++const char *xen_compile_system_maintainer_domain(void); ++const char *xen_compile_system_maintainer_local(void); ++const char *xen_compile_system_version(void); + const char *xen_compiler(void); + unsigned int xen_major_version(void); + unsigned int xen_minor_version(void); diff --git a/patches/prefix-abiname/config-prefix.diff b/patches/prefix-abiname/config-prefix.diff new file mode 100644 index 0000000000..d3ab54b5ac --- /dev/null +++ b/patches/prefix-abiname/config-prefix.diff @@ -0,0 +1,29 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:46:45 +0200 +Subject: config-prefix.diff + +Patch-Name: config-prefix.diff + +--- + +--- a/Config.mk ++++ b/Config.mk +@@ -83,7 +83,7 @@ EXTRA_LIB += $(EXTRA_PREFIX)/lib + endif + + PYTHON ?= python +-PYTHON_PREFIX_ARG ?= --prefix="$(prefix)" ++PYTHON_PREFIX_ARG ?= --home="$(LIBEXEC)" + # The above requires that prefix contains *no spaces*. This variable is here + # to permit the user to set PYTHON_PREFIX_ARG to '' to workaround this bug: + # https://bugs.launchpad.net/ubuntu/+bug/362570 +--- a/config/Paths.mk.in ++++ b/config/Paths.mk.in +@@ -13,6 +13,7 @@ + # http://wiki.xen.org/wiki/Category:Host_Configuration#System_wide_xen_configuration + + PACKAGE_TARNAME := @PACKAGE_TARNAME@ ++PACKAGE_VERSION := @PACKAGE_VERSION@ + prefix := @prefix@ + bindir := @bindir@ + sbindir := @sbindir@ diff --git a/patches/prefix-abiname/tools-blktap2-prefix.diff b/patches/prefix-abiname/tools-blktap2-prefix.diff new file mode 100644 index 0000000000..d6ea7da478 --- /dev/null +++ b/patches/prefix-abiname/tools-blktap2-prefix.diff @@ -0,0 +1,171 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:46:53 +0200 +Subject: tools-blktap2-prefix.diff + +Patch-Name: tools-blktap2-prefix.diff + +--- + +--- a/tools/blktap2/control/Makefile ++++ b/tools/blktap2/control/Makefile +@@ -1,10 +1,7 @@ + XEN_ROOT := $(CURDIR)/../../../ + include $(XEN_ROOT)/tools/Rules.mk + +-MAJOR = 1.0 +-MINOR = 0 + LIBNAME = libblktapctl +-LIBSONAME = $(LIBNAME).so.$(MAJOR) + + IBIN = tap-ctl + +@@ -38,11 +35,11 @@ OBJS = $(CTL_OBJS) tap-ctl.o + PICS = $(CTL_PICS) + + LIB_STATIC = $(LIBNAME).a +-LIB_SHARED = $(LIBSONAME).$(MINOR) ++LIB_SHARED = $(LIBNAME).so + IBIN = tap-ctl + + PKG_CONFIG := xenblktapctl.pc +-PKG_CONFIG_VERSION := $(MAJOR).$(MINOR) ++PKG_CONFIG_VERSION := $(PACKAGE_VERSION) + + ifneq ($(CONFIG_LIBXC_MINIOS),y) + PKG_CONFIG_INST := $(PKG_CONFIG) +@@ -62,43 +59,34 @@ all: build + + build: $(IBIN) $(LIB_STATIC) $(LIB_SHARED) $(PKG_CONFIG_INST) $(PKG_CONFIG_LOCAL) + +-$(LIBNAME).so: $(LIBSONAME) +- ln -sf $< $@ +- +-$(LIBSONAME): $(LIB_SHARED) +- ln -sf $< $@ +- + tap-ctl: tap-ctl.o $(LIBNAME).so +- $(CC) $(LDFLAGS) -o $@ $^ $(APPEND_LDFLAGS) ++ $(CC) $(LDFLAGS) $(call LDFLAGS_RPATH,../lib) -o $@ $^ $(APPEND_LDFLAGS) + + $(LIB_STATIC): $(CTL_OBJS) + $(AR) r $@ $^ + + $(LIB_SHARED): $(CTL_PICS) +- $(CC) $(LDFLAGS) -fPIC -Wl,$(SONAME_LDFLAG) -Wl,$(LIBSONAME) $(SHLIB_LDFLAGS) -rdynamic $^ -o $@ $(APPEND_LDFLAGS) ++ $(CC) $(LDFLAGS) -fPIC $(SHLIB_LDFLAGS) -rdynamic $^ -o $@ $(APPEND_LDFLAGS) + + install: build +- $(INSTALL_DIR) -p $(DESTDIR)$(sbindir) +- $(INSTALL_PROG) $(IBIN) $(DESTDIR)$(sbindir) ++ $(INSTALL_DIR) -p $(DESTDIR)$(libdir) ++ $(INSTALL_DIR) -p $(DESTDIR)$(LIBEXEC_BIN) ++ $(INSTALL_DIR) -p $(DESTDIR)$(LIBEXEC_LIB) ++ $(INSTALL_PROG) $(IBIN) $(DESTDIR)$(LIBEXEC_BIN) + $(INSTALL_DATA) $(LIB_STATIC) $(DESTDIR)$(libdir) +- $(INSTALL_PROG) $(LIB_SHARED) $(DESTDIR)$(libdir) +- ln -sf $(LIBSONAME) $(DESTDIR)$(libdir)/$(LIBNAME).so +- ln -sf $(LIB_SHARED) $(DESTDIR)$(libdir)/$(LIBSONAME) ++ $(INSTALL_PROG) $(LIB_SHARED) $(DESTDIR)$(LIBEXEC_LIB) + $(INSTALL_DATA) xenblktapctl.pc $(DESTDIR)$(PKG_INSTALLDIR) + + clean: + rm -f $(OBJS) $(PICS) $(DEPS_RM) $(IBIN) $(LIB_STATIC) $(LIB_SHARED) +- rm -f $(LIBNAME).so $(LIBSONAME) + rm -f *~ + rm -f xenblktapctl.pc + + uninstall: + rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xenblktapctl.pc +- rm -f $(DESTDIR)$(libdir)/$(LIBSONAME) +- rm -f $(DESTDIR)$(libdir)/$(LIBNAME).so +- rm -f $(addprefix $(DESTDIR)$(libdir)/, $(LIB_SHARED)) ++ rm -f $(addprefix $(DESTDIR)$(LIBEXEC_LIB)/, $(LIB_SHARED)) + rm -f $(addprefix $(DESTDIR)$(libdir)/, $(LIB_STATIC)) +- rm -f $(addprefix $(DESTDIR)$(sbindir)/, $(IBIN)) ++ rm -f $(addprefix $(DESTDIR)$(LIBEXEC_BIN)/, $(IBIN)) + + distclean: clean + +--- a/tools/blktap2/vhd/Makefile ++++ b/tools/blktap2/vhd/Makefile +@@ -12,6 +12,7 @@ CFLAGS += -Werror + CFLAGS += -Wno-unused + CFLAGS += -I../include + CFLAGS += -D_GNU_SOURCE ++CFLAGS += $(CFLAGS_libxenctrl) + + ifeq ($(CONFIG_X86_64),y) + CFLAGS += -fPIC +--- a/tools/blktap2/vhd/lib/Makefile ++++ b/tools/blktap2/vhd/lib/Makefile +@@ -2,25 +2,19 @@ XEN_ROOT=$(CURDIR)/../../../.. + BLKTAP_ROOT := ../.. + include $(XEN_ROOT)/tools/Rules.mk + +-LIBVHD-MAJOR = 1.0 +-LIBVHD-MINOR = 0 +-LIBVHD-SONAME = libvhd.so.$(LIBVHD-MAJOR) +- + LVM-UTIL-OBJ := $(BLKTAP_ROOT)/lvm/lvm-util.o + +-LIBVHD-BUILD := libvhd.a +- +-INST-DIR = $(libdir) +- + CFLAGS += -Werror + CFLAGS += -Wno-unused + CFLAGS += -I../../include + CFLAGS += -D_GNU_SOURCE + CFLAGS += -fPIC ++CFLAGS += $(CFLAGS_libxenctrl) + + ifeq ($(CONFIG_Linux),y) + LIBS := -luuid + endif ++LDFLAGS += $(LDFLAGS_libxenctrl) $(call LDFLAGS_RPATH) + + ifeq ($(CONFIG_LIBICONV),y) + LIBS += -liconv +@@ -50,33 +44,26 @@ LIB-OBJS += $(LVM-UTIL-OBJ) + + LIB-PICOBJS = $(patsubst %.o,%.opic,$(LIB-OBJS)) + +-LIBVHD = libvhd.a libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR) ++LIBVHD = libvhd.a libvhd.so + + all: build + +-build: libvhd.a libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR) ++build: libvhd.a libvhd.so + + libvhd.a: $(LIB-OBJS) + $(AR) rc $@ $^ + +-libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR): $(LIB-PICOBJS) +- $(CC) -Wl,$(SONAME_LDFLAG),$(LIBVHD-SONAME) $(SHLIB_LDFLAGS) \ +- $(LDFLAGS) -o libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR) $^ $(LIBS) +- ln -sf libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR) libvhd.so.$(LIBVHD-MAJOR) +- ln -sf libvhd.so.$(LIBVHD-MAJOR) libvhd.so ++libvhd.so: $(LIB-PICOBJS) ++ $(CC) $(SHLIB_LDFLAGS) $(LDFLAGS) -o libvhd.so $^ $(LIBS) + + install: all +- $(INSTALL_DIR) -p $(DESTDIR)$(INST-DIR) +- $(INSTALL_DATA) libvhd.a $(DESTDIR)$(INST-DIR) +- $(INSTALL_PROG) libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR) $(DESTDIR)$(INST-DIR) +- ln -sf libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR) $(DESTDIR)$(INST-DIR)/libvhd.so.$(LIBVHD-MAJOR) +- ln -sf libvhd.so.$(LIBVHD-MAJOR) $(DESTDIR)$(INST-DIR)/libvhd.so ++ $(INSTALL_DIR) -p $(DESTDIR)$(libdir) ++ $(INSTALL_DATA) libvhd.a $(DESTDIR)$(libdir) ++ $(INSTALL_PROG) libvhd.so $(DESTDIR)$(libdir) + + uninstall: +- rm -f $(DESTDIR)$(INST-DIR)/libvhd.so +- rm -f $(DESTDIR)$(INST-DIR)/libvhd.so.$(LIBVHD-MAJOR) +- rm -f $(DESTDIR)$(INST-DIR)/libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR) +- rm -f $(DESTDIR)$(INST-DIR)/libvhd.a ++ rm -f $(DESTDIR)$(libdir)/libvhd.so ++ rm -f $(DESTDIR)$(libdir)/libvhd.a + + clean: + rm -rf *.a *.so* *.o *.opic *~ $(DEPS_RM) $(LIBVHD) diff --git a/patches/prefix-abiname/tools-console-prefix.diff b/patches/prefix-abiname/tools-console-prefix.diff new file mode 100644 index 0000000000..147be925ab --- /dev/null +++ b/patches/prefix-abiname/tools-console-prefix.diff @@ -0,0 +1,35 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:46:54 +0200 +Subject: tools-console-prefix.diff + +Patch-Name: tools-console-prefix.diff + +--- + +--- a/tools/console/Makefile ++++ b/tools/console/Makefile +@@ -8,6 +8,7 @@ CFLAGS += $(CFLAGS_libxenstore) + LDLIBS += $(LDLIBS_libxenctrl) + LDLIBS += $(LDLIBS_libxenstore) + LDLIBS += $(SOCKET_LIBS) ++LDFLAGS += $(call LDFLAGS_RPATH,../lib) + + LDLIBS_xenconsoled += $(UTIL_LIBS) + LDLIBS_xenconsoled += -lrt +@@ -45,14 +46,13 @@ $(eval $(genpath-target)) + + .PHONY: install + install: $(BIN) +- $(INSTALL_DIR) $(DESTDIR)/$(sbindir) +- $(INSTALL_PROG) xenconsoled $(DESTDIR)/$(sbindir) + $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN) + $(INSTALL_PROG) xenconsole $(DESTDIR)$(LIBEXEC_BIN) ++ $(INSTALL_PROG) xenconsoled $(DESTDIR)$(LIBEXEC_BIN) + + .PHONY: uninstall + uninstall: + rm -f $(DESTDIR)$(LIBEXEC_BIN)/xenconsole +- rm -f $(DESTDIR)$(sbindir)/xenconsoled ++ rm -f $(DESTDIR)$(LIBEXEC_BIN)/xenconsoled + + -include $(DEPS_INCLUDE) diff --git a/patches/prefix-abiname/tools-libfsimage-abiname.diff b/patches/prefix-abiname/tools-libfsimage-abiname.diff new file mode 100644 index 0000000000..a5dd479e7f --- /dev/null +++ b/patches/prefix-abiname/tools-libfsimage-abiname.diff @@ -0,0 +1,62 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:46:47 +0200 +Subject: tools-libfsimage-abiname.diff + +Patch-Name: tools-libfsimage-abiname.diff + +--- + +--- a/tools/libfsimage/common/Makefile ++++ b/tools/libfsimage/common/Makefile +@@ -1,9 +1,6 @@ + XEN_ROOT = $(CURDIR)/../../.. + include $(XEN_ROOT)/tools/libfsimage/Rules.mk + +-MAJOR = 1.0 +-MINOR = 0 +- + LDFLAGS-$(CONFIG_SunOS) = -Wl,-M -Wl,mapfile-SunOS + LDFLAGS-$(CONFIG_Linux) = -Wl,mapfile-GNU + LDFLAGS = $(LDFLAGS-y) +@@ -15,7 +12,7 @@ LIB_SRCS-y = fsimage.c fsimage_plugin.c + + PIC_OBJS := $(patsubst %.c,%.opic,$(LIB_SRCS-y)) + +-LIB = libfsimage.so libfsimage.so.$(MAJOR) libfsimage.so.$(MAJOR).$(MINOR) ++LIB = libfsimage.so + + .PHONY: all + all: $(LIB) +@@ -24,9 +21,7 @@ all: $(LIB) + install: all + $(INSTALL_DIR) $(DESTDIR)$(libdir) + $(INSTALL_DIR) $(DESTDIR)$(includedir) +- $(INSTALL_PROG) libfsimage.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir) +- ln -sf libfsimage.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libfsimage.so.$(MAJOR) +- ln -sf libfsimage.so.$(MAJOR) $(DESTDIR)$(libdir)/libfsimage.so ++ $(INSTALL_PROG) libfsimage.so $(DESTDIR)$(libdir) + $(INSTALL_DATA) fsimage.h $(DESTDIR)$(includedir) + $(INSTALL_DATA) fsimage_plugin.h $(DESTDIR)$(includedir) + $(INSTALL_DATA) fsimage_grub.h $(DESTDIR)$(includedir) +@@ -37,19 +32,12 @@ uninstall: + rm -f $(DESTDIR)$(includedir)/fsimage_plugin.h + rm -f $(DESTDIR)$(includedir)/fsimage.h + rm -f $(DESTDIR)$(libdir)/libfsimage.so +- rm -f $(DESTDIR)$(libdir)/libfsimage.so.$(MAJOR) +- rm -f $(DESTDIR)$(libdir)/libfsimage.so.$(MAJOR).$(MINOR) + + clean distclean:: + rm -f $(LIB) + +-libfsimage.so: libfsimage.so.$(MAJOR) +- ln -sf $< $@ +-libfsimage.so.$(MAJOR): libfsimage.so.$(MAJOR).$(MINOR) +- ln -sf $< $@ +- +-libfsimage.so.$(MAJOR).$(MINOR): $(PIC_OBJS) +- $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libfsimage.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $^ $(PTHREAD_LIBS) $(APPEND_LDFLAGS) ++libfsimage.so: $(PIC_OBJS) ++ $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG),$@ $(SHLIB_LDFLAGS) -o $@ $^ $(PTHREAD_LIBS) $(APPEND_LDFLAGS) + + -include $(DEPS_INCLUDE) + diff --git a/patches/prefix-abiname/tools-libfsimage-prefix.diff b/patches/prefix-abiname/tools-libfsimage-prefix.diff new file mode 100644 index 0000000000..c6ceea754e --- /dev/null +++ b/patches/prefix-abiname/tools-libfsimage-prefix.diff @@ -0,0 +1,55 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:46:55 +0200 +Subject: tools-libfsimage-prefix.diff + +Patch-Name: tools-libfsimage-prefix.diff + +--- + +--- a/tools/libfsimage/Rules.mk ++++ b/tools/libfsimage/Rules.mk +@@ -3,10 +3,11 @@ include $(XEN_ROOT)/tools/Rules.mk + CFLAGS += -Wno-unknown-pragmas -I$(XEN_ROOT)/tools/libfsimage/common/ -DFSIMAGE_FSDIR=\"$(FSDIR)\" + CFLAGS += -Werror -D_GNU_SOURCE + LDFLAGS += -L../common/ ++LDFLAGS += $(call LDFLAGS_RPATH,../..) + + PIC_OBJS := $(patsubst %.c,%.opic,$(LIB_SRCS-y)) + +-FSDIR = $(libdir)/fs ++FSDIR = $(LIBEXEC_LIB)/fs + + FSLIB = fsimage.so + +--- a/tools/libfsimage/common/Makefile ++++ b/tools/libfsimage/common/Makefile +@@ -1,6 +1,8 @@ + XEN_ROOT = $(CURDIR)/../../.. + include $(XEN_ROOT)/tools/libfsimage/Rules.mk + ++CFLAGS += -DFSDIR="\"$(LIBEXEC_LIB)/fs\"" ++ + LDFLAGS-$(CONFIG_SunOS) = -Wl,-M -Wl,mapfile-SunOS + LDFLAGS-$(CONFIG_Linux) = -Wl,mapfile-GNU + LDFLAGS = $(LDFLAGS-y) +@@ -19,9 +21,9 @@ all: $(LIB) + + .PHONY: install + install: all +- $(INSTALL_DIR) $(DESTDIR)$(libdir) ++ $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_LIB) + $(INSTALL_DIR) $(DESTDIR)$(includedir) +- $(INSTALL_PROG) libfsimage.so $(DESTDIR)$(libdir) ++ $(INSTALL_PROG) libfsimage.so $(DESTDIR)$(LIBEXEC_LIB) + $(INSTALL_DATA) fsimage.h $(DESTDIR)$(includedir) + $(INSTALL_DATA) fsimage_plugin.h $(DESTDIR)$(includedir) + $(INSTALL_DATA) fsimage_grub.h $(DESTDIR)$(includedir) +@@ -31,7 +33,7 @@ uninstall: + rm -f $(DESTDIR)$(includedir)/fsimage_grub.h + rm -f $(DESTDIR)$(includedir)/fsimage_plugin.h + rm -f $(DESTDIR)$(includedir)/fsimage.h +- rm -f $(DESTDIR)$(libdir)/libfsimage.so ++ rm -f $(DESTDIR)$(LIBEXEC_LIB)/libfsimage.so + + clean distclean:: + rm -f $(LIB) diff --git a/patches/prefix-abiname/tools-libxc-abiname.diff b/patches/prefix-abiname/tools-libxc-abiname.diff new file mode 100644 index 0000000000..0887d2ebde --- /dev/null +++ b/patches/prefix-abiname/tools-libxc-abiname.diff @@ -0,0 +1,122 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:46:48 +0200 +Subject: tools-libxc-abiname.diff + +Patch-Name: tools-libxc-abiname.diff + +--- + +--- a/tools/libxc/Makefile ++++ b/tools/libxc/Makefile +@@ -1,9 +1,6 @@ + XEN_ROOT = $(CURDIR)/../.. + include $(XEN_ROOT)/tools/Rules.mk + +-MAJOR = 4.11 +-MINOR = 0 +- + ifeq ($(CONFIG_LIBXC_MINIOS),y) + # Save/restore of a domain is currently incompatible with a stubdom environment + override CONFIG_MIGRATE := n +@@ -134,12 +131,12 @@ $(CTRL_LIB_OBJS) $(CTRL_PIC_OBJS): CFLAG + + LIB := libxenctrl.a + ifneq ($(nosharedlibs),y) +-LIB += libxenctrl.so libxenctrl.so.$(MAJOR) libxenctrl.so.$(MAJOR).$(MINOR) ++LIB += libxenctrl.so libxenctrl-$(PACKAGE_VERSION).so + endif + + LIB += libxenguest.a + ifneq ($(nosharedlibs),y) +-LIB += libxenguest.so libxenguest.so.$(MAJOR) libxenguest.so.$(MAJOR).$(MINOR) ++LIB += libxenguest.so libxenguest-$(PACKAGE_VERSION).so + endif + + genpath-target = $(call buildmakevars2header,_paths.h) +@@ -160,7 +157,7 @@ $(CTRL_LIB_OBJS) $(GUEST_LIB_OBJS) \ + $(CTRL_PIC_OBJS) $(GUEST_PIC_OBJS): xc_private.h + + PKG_CONFIG := xencontrol.pc xenguest.pc +-PKG_CONFIG_VERSION := $(MAJOR).$(MINOR) ++PKG_CONFIG_VERSION := $(PACKAGE_VERSION) + + ifneq ($(CONFIG_LIBXC_MINIOS),y) + PKG_CONFIG_INST := $(PKG_CONFIG) +@@ -190,15 +187,13 @@ libs: $(LIB) $(PKG_CONFIG_INST) $(PKG_CO + install: build + $(INSTALL_DIR) $(DESTDIR)$(libdir) + $(INSTALL_DIR) $(DESTDIR)$(includedir) +- $(INSTALL_SHLIB) libxenctrl.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir) ++ $(INSTALL_SHLIB) libxenctrl-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir) ++ $(SYMLINK_SHLIB) libxenctrl-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libxenctrl.so + $(INSTALL_DATA) libxenctrl.a $(DESTDIR)$(libdir) +- $(SYMLINK_SHLIB) libxenctrl.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxenctrl.so.$(MAJOR) +- $(SYMLINK_SHLIB) libxenctrl.so.$(MAJOR) $(DESTDIR)$(libdir)/libxenctrl.so + $(INSTALL_DATA) include/xenctrl.h include/xenctrl_compat.h $(DESTDIR)$(includedir) +- $(INSTALL_SHLIB) libxenguest.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir) ++ $(INSTALL_SHLIB) libxenguest-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir) ++ $(SYMLINK_SHLIB) libxenguest-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libxenguest.so + $(INSTALL_DATA) libxenguest.a $(DESTDIR)$(libdir) +- $(SYMLINK_SHLIB) libxenguest.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxenguest.so.$(MAJOR) +- $(SYMLINK_SHLIB) libxenguest.so.$(MAJOR) $(DESTDIR)$(libdir)/libxenguest.so + $(INSTALL_DATA) include/xenguest.h $(DESTDIR)$(includedir) + $(INSTALL_DATA) xencontrol.pc $(DESTDIR)$(PKG_INSTALLDIR) + $(INSTALL_DATA) xenguest.pc $(DESTDIR)$(PKG_INSTALLDIR) +@@ -208,15 +203,13 @@ uninstall: + rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xenguest.pc + rm -f $(DESTDIR)$(includedir)/xenguest.h + rm -f $(DESTDIR)$(libdir)/libxenguest.so +- rm -f $(DESTDIR)$(libdir)/libxenguest.so.$(MAJOR) +- rm -f $(DESTDIR)$(libdir)/libxenguest.so.$(MAJOR).$(MINOR) ++ rm -f $(DESTDIR)$(libdir)/libxenguest-$(PACKAGE_VERSION).so + rm -f $(DESTDIR)$(libdir)/libxenguest.a + rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xencontrol.pc + rm -f $(DESTDIR)$(includedir)/xenctrl.h + rm -f $(DESTDIR)$(includedir)/xenctrl_compat.h + rm -f $(DESTDIR)$(libdir)/libxenctrl.so +- rm -f $(DESTDIR)$(libdir)/libxenctrl.so.$(MAJOR) +- rm -f $(DESTDIR)$(libdir)/libxenctrl.so.$(MAJOR).$(MINOR) ++ rm -f $(DESTDIR)$(libdir)/libxenctrl-$(PACKAGE_VERSION).so + rm -f $(DESTDIR)$(libdir)/libxenctrl.a + + .PHONY: TAGS +@@ -249,22 +242,18 @@ rpm: build + libxenctrl.a: $(CTRL_LIB_OBJS) + $(AR) rc $@ $^ + +-libxenctrl.so: libxenctrl.so.$(MAJOR) +- $(SYMLINK_SHLIB) $< $@ +-libxenctrl.so.$(MAJOR): libxenctrl.so.$(MAJOR).$(MINOR) ++libxenctrl.so: libxenctrl-$(PACKAGE_VERSION).so + $(SYMLINK_SHLIB) $< $@ + +-libxenctrl.so.$(MAJOR).$(MINOR): $(CTRL_PIC_OBJS) +- $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenctrl.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $^ $(LDLIBS_libxentoollog) $(LDLIBS_libxenevtchn) $(LDLIBS_libxengnttab) $(LDLIBS_libxencall) $(LDLIBS_libxenforeignmemory) $(LDLIBS_libxendevicemodel) $(PTHREAD_LIBS) $(APPEND_LDFLAGS) ++libxenctrl-$(PACKAGE_VERSION).so: $(CTRL_PIC_OBJS) ++ $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG),$@ $(SHLIB_LDFLAGS) -o $@ $^ $(LDLIBS_libxentoollog) $(LDLIBS_libxenevtchn) $(LDLIBS_libxengnttab) $(LDLIBS_libxencall) $(LDLIBS_libxenforeignmemory) $(LDLIBS_libxendevicemodel) $(PTHREAD_LIBS) $(APPEND_LDFLAGS) + + # libxenguest + + libxenguest.a: $(GUEST_LIB_OBJS) + $(AR) rc $@ $^ + +-libxenguest.so: libxenguest.so.$(MAJOR) +- $(SYMLINK_SHLIB) $< $@ +-libxenguest.so.$(MAJOR): libxenguest.so.$(MAJOR).$(MINOR) ++libxenguest.so: libxenguest-$(PACKAGE_VERSION).so + $(SYMLINK_SHLIB) $< $@ + + ifeq ($(CONFIG_MiniOS),y) +@@ -276,9 +265,9 @@ endif + xc_dom_bzimageloader.o: CFLAGS += $(filter -D%,$(zlib-options)) + xc_dom_bzimageloader.opic: CFLAGS += $(filter -D%,$(zlib-options)) + +-libxenguest.so.$(MAJOR).$(MINOR): COMPRESSION_LIBS = $(filter -l%,$(zlib-options)) +-libxenguest.so.$(MAJOR).$(MINOR): $(GUEST_PIC_OBJS) libxenctrl.so +- $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenguest.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(GUEST_PIC_OBJS) $(COMPRESSION_LIBS) -lz $(LDLIBS_libxenevtchn) $(LDLIBS_libxenctrl) $(PTHREAD_LIBS) $(APPEND_LDFLAGS) ++libxenguest-$(PACKAGE_VERSION).so: COMPRESSION_LIBS = $(filter -l%,$(zlib-options)) ++libxenguest-$(PACKAGE_VERSION).so: $(GUEST_PIC_OBJS) libxenctrl-$(PACKAGE_VERSION).so ++ $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG),$@ $(SHLIB_LDFLAGS) -o $@ $(GUEST_PIC_OBJS) $(COMPRESSION_LIBS) -lz $(LDLIBS_libxenevtchn) $(LDLIBS_libxenctrl) $(PTHREAD_LIBS) $(APPEND_LDFLAGS) + + -include $(DEPS_INCLUDE) + diff --git a/patches/prefix-abiname/tools-libxl-abiname.diff b/patches/prefix-abiname/tools-libxl-abiname.diff new file mode 100644 index 0000000000..d3f2f1e380 --- /dev/null +++ b/patches/prefix-abiname/tools-libxl-abiname.diff @@ -0,0 +1,119 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:46:49 +0200 +Subject: tools-libxl-abiname.diff + +Patch-Name: tools-libxl-abiname.diff +--- + +--- a/tools/libxl/Makefile ++++ b/tools/libxl/Makefile +@@ -5,12 +5,6 @@ + XEN_ROOT = $(CURDIR)/../.. + include $(XEN_ROOT)/tools/Rules.mk + +-MAJOR = 4.11 +-MINOR = 0 +- +-XLUMAJOR = 4.11 +-XLUMINOR = 0 +- + CFLAGS += -Werror -Wno-format-zero-length -Wmissing-declarations \ + -Wno-declaration-after-statement -Wformat-nonliteral + CFLAGS += -I. -fPIC +@@ -190,12 +184,12 @@ SAVE_HELPER_OBJS = libxl_save_helper.o _ + $(SAVE_HELPER_OBJS): CFLAGS += $(CFLAGS_libxenctrl) $(CFLAGS_libxenevtchn) + + PKG_CONFIG = xenlight.pc xlutil.pc +-PKG_CONFIG_VERSION := $(MAJOR).$(MINOR) ++PKG_CONFIG_VERSION := $(PACKAGE_VERSION) + + ifneq ($(CONFIG_LIBXC_MINIOS),y) + PKG_CONFIG_INST := $(PKG_CONFIG) +-xenlight.pc: PKG_CONFIG_VERSION = $(MAJOR).$(MINOR) +-xlutil.pc: PKG_CONFIG_VERSION = $(XLUMAJOR).$(XLUMINOR) ++xenlight.pc: PKG_CONFIG_VERSION = $(PACKAGE_VERSION) ++xlutil.pc: PKG_CONFIG_VERSION = $(PACKAGE_VERSION) + $(PKG_CONFIG_INST): PKG_CONFIG_PREFIX = $(prefix) + $(PKG_CONFIG_INST): PKG_CONFIG_INCDIR = $(includedir) + $(PKG_CONFIG_INST): PKG_CONFIG_LIBDIR = $(libdir) +@@ -203,8 +197,8 @@ endif + + PKG_CONFIG_LOCAL := $(foreach pc,$(PKG_CONFIG),$(PKG_CONFIG_DIR)/$(pc)) + +-$(PKG_CONFIG_DIR)/xenlight.pc: PKG_CONFIG_VERSION = $(MAJOR).$(MINOR) +-$(PKG_CONFIG_DIR)/xlutil.pc: PKG_CONFIG_VERSION = $(XLUMAJOR).$(XLUMINOR) ++$(PKG_CONFIG_DIR)/xenlight.pc: PKG_CONFIG_VERSION = $(PACKAGE_VERSION) ++$(PKG_CONFIG_DIR)/xlutil.pc: PKG_CONFIG_VERSION = $(PACKAGE_VERSION) + $(PKG_CONFIG_LOCAL): PKG_CONFIG_PREFIX = $(XEN_ROOT) + $(PKG_CONFIG_LOCAL): PKG_CONFIG_INCDIR = $(CURDIR) + $(PKG_CONFIG_LOCAL): PKG_CONFIG_LIBDIR = $(CURDIR) +@@ -274,29 +268,23 @@ _libxl_type%.h _libxl_type%_json.h _libx + $(call move-if-changed,__libxl_type$(stem)_json.h,_libxl_type$(stem)_json.h) + $(call move-if-changed,__libxl_type$(stem).c,_libxl_type$(stem).c) + +-libxenlight.so: libxenlight.so.$(MAJOR) +- $(SYMLINK_SHLIB) $< $@ +- +-libxenlight.so.$(MAJOR): libxenlight.so.$(MAJOR).$(MINOR) ++libxenlight.so: libxenlight-$(PACKAGE_VERSION).so + $(SYMLINK_SHLIB) $< $@ + +-libxenlight.so.$(MAJOR).$(MINOR): $(LIBXL_OBJS) +- $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenlight.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $^ $(LIBXL_LIBS) $(APPEND_LDFLAGS) ++libxenlight-$(PACKAGE_VERSION).so: $(LIBXL_OBJS) ++ $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG),$@ $(SHLIB_LDFLAGS) -o $@ $^ $(LIBXL_LIBS) $(APPEND_LDFLAGS) + + libxenlight_test.so: $(LIBXL_OBJS) $(LIBXL_TEST_OBJS) +- $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenlight.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $^ $(LIBXL_LIBS) $(APPEND_LDFLAGS) ++ $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG),$@ $(SHLIB_LDFLAGS) -o $@ $^ $(LIBXL_LIBS) $(APPEND_LDFLAGS) + + libxenlight.a: $(LIBXL_OBJS) + $(AR) rcs libxenlight.a $^ + +-libxlutil.so: libxlutil.so.$(XLUMAJOR) +- $(SYMLINK_SHLIB) $< $@ +- +-libxlutil.so.$(XLUMAJOR): libxlutil.so.$(XLUMAJOR).$(XLUMINOR) ++libxlutil.so: libxlutil-$(PACKAGE_VERSION).so + $(SYMLINK_SHLIB) $< $@ + +-libxlutil.so.$(XLUMAJOR).$(XLUMINOR): $(LIBXLU_OBJS) libxenlight.so +- $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxlutil.so.$(XLUMAJOR) $(SHLIB_LDFLAGS) -o $@ $(LIBXLU_OBJS) $(LIBXLU_LIBS) $(APPEND_LDFLAGS) ++libxlutil-$(PACKAGE_VERSION).so: $(LIBXLU_OBJS) libxenlight.so ++ $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG),$@ $(SHLIB_LDFLAGS) -o $@ $(LIBXLU_OBJS) $(LIBXLU_LIBS) $(APPEND_LDFLAGS) + + libxlutil.a: $(LIBXLU_OBJS) + $(AR) rcs libxlutil.a $^ +@@ -316,13 +304,11 @@ install: all + $(INSTALL_DIR) $(DESTDIR)$(includedir) + $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN) + $(INSTALL_PROG) libxl-save-helper $(DESTDIR)$(LIBEXEC_BIN) +- $(INSTALL_SHLIB) libxenlight.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir) +- $(SYMLINK_SHLIB) libxenlight.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxenlight.so.$(MAJOR) +- $(SYMLINK_SHLIB) libxenlight.so.$(MAJOR) $(DESTDIR)$(libdir)/libxenlight.so ++ $(INSTALL_SHLIB) libxenlight-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir) ++ $(SYMLINK_SHLIB) libxenlight-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libxenlight.so + $(INSTALL_DATA) libxenlight.a $(DESTDIR)$(libdir) +- $(INSTALL_SHLIB) libxlutil.so.$(XLUMAJOR).$(XLUMINOR) $(DESTDIR)$(libdir) +- $(SYMLINK_SHLIB) libxlutil.so.$(XLUMAJOR).$(XLUMINOR) $(DESTDIR)$(libdir)/libxlutil.so.$(XLUMAJOR) +- $(SYMLINK_SHLIB) libxlutil.so.$(XLUMAJOR) $(DESTDIR)$(libdir)/libxlutil.so ++ $(INSTALL_SHLIB) libxlutil-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir) ++ $(SYMLINK_SHLIB) libxlutil-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libxlutil.so + $(INSTALL_DATA) libxlutil.a $(DESTDIR)$(libdir) + $(INSTALL_DATA) libxl.h libxl_event.h libxl_json.h _libxl_types.h _libxl_types_json.h _libxl_list.h libxl_utils.h libxl_uuid.h libxlutil.h $(DESTDIR)$(includedir) + $(INSTALL_DATA) xenlight.pc $(DESTDIR)$(PKG_INSTALLDIR) +@@ -334,12 +320,10 @@ uninstall: + rm -f $(addprefix $(DESTDIR)$(includedir)/,libxl.h libxl_event.h libxl_json.h _libxl_types.h _libxl_types_json.h _libxl_list.h libxl_utils.h libxl_uuid.h libxlutil.h) + rm -f $(DESTDIR)$(libdir)/libxlutil.a + rm -f $(DESTDIR)$(libdir)/libxlutil.so +- rm -f $(DESTDIR)$(libdir)/libxlutil.so.$(XLUMAJOR) +- rm -f $(DESTDIR)$(libdir)/libxlutil.so.$(XLUMAJOR).$(XLUMINOR) ++ rm -f $(DESTDIR)$(libdir)/libxlutil-$(PACKAGE_VERSION).so + rm -f $(DESTDIR)$(libdir)/libxenlight.a + rm -f $(DESTDIR)$(libdir)/libxenlight.so +- rm -f $(DESTDIR)$(libdir)/libxenlight.so.$(MAJOR) +- rm -f $(DESTDIR)$(libdir)/libxenlight.so.$(MAJOR).$(MINOR) ++ rm -f $(DESTDIR)$(libdir)/libxenlight-$(PACKAGE_VERSION).so + rm -f $(DESTDIR)$(LIBEXEC_BIN)/libxl-save-helper + + .PHONY: clean diff --git a/patches/prefix-abiname/tools-libxl-prefix.diff b/patches/prefix-abiname/tools-libxl-prefix.diff new file mode 100644 index 0000000000..ea329b4138 --- /dev/null +++ b/patches/prefix-abiname/tools-libxl-prefix.diff @@ -0,0 +1,51 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:46:57 +0200 +Subject: tools-libxl-prefix.diff + +Patch-Name: tools-libxl-prefix.diff + +Note: SMB: Added change for LIBEXEC_BIN for tools/xl/Makefile +--- + +--- a/tools/libxl/Makefile ++++ b/tools/libxl/Makefile +@@ -13,6 +13,9 @@ ifeq ($(CONFIG_Linux),y) + LIBUUID_LIBS += -luuid + endif + ++LDFLAGS_XL = $(call LDFLAGS_RPATH,../lib) ++LDFLAGS_LIBXL = $(call LDFLAGS_RPATH) ++ + LIBXL_LIBS = + LIBXL_LIBS = $(LDLIBS_libxentoollog) $(LDLIBS_libxenevtchn) $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(LDLIBS_libxenstore) $(LDLIBS_libblktapctl) $(LDLIBS_libxentoolcore) $(PTYFUNCS_LIBS) $(LIBUUID_LIBS) + ifeq ($(CONFIG_LIBNL),y) +@@ -272,7 +275,7 @@ libxenlight.so: libxenlight-$(PACKAGE_VE + $(SYMLINK_SHLIB) $< $@ + + libxenlight-$(PACKAGE_VERSION).so: $(LIBXL_OBJS) +- $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG),$@ $(SHLIB_LDFLAGS) -o $@ $^ $(LIBXL_LIBS) $(APPEND_LDFLAGS) ++ $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG),$@ $(LDFLAGS_LIBXL) $(SHLIB_LDFLAGS) -o $@ $^ $(LIBXL_LIBS) $(APPEND_LDFLAGS) + + libxenlight_test.so: $(LIBXL_OBJS) $(LIBXL_TEST_OBJS) + $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG),$@ $(SHLIB_LDFLAGS) -o $@ $^ $(LIBXL_LIBS) $(APPEND_LDFLAGS) +--- a/tools/xl/Makefile ++++ b/tools/xl/Makefile +@@ -41,15 +41,15 @@ xl: $(XL_OBJS) + + .PHONY: install + install: all +- $(INSTALL_DIR) $(DESTDIR)$(sbindir) ++ $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN) + $(INSTALL_DIR) $(DESTDIR)$(BASH_COMPLETION_DIR) +- $(INSTALL_PROG) xl $(DESTDIR)$(sbindir) ++ $(INSTALL_PROG) xl $(DESTDIR)$(LIBEXEC_BIN) + $(INSTALL_DATA) bash-completion $(DESTDIR)$(BASH_COMPLETION_DIR)/xl.sh + + .PHONY: uninstall + uninstall: + rm -f $(DESTDIR)$(BASH_COMPLETION_DIR)/xl.sh +- rm -f $(DESTDIR)$(sbindir)/xl ++ rm -f $(DESTDIR)$(LIBEXEC_BIN)/xl + + .PHONY: clean + clean: diff --git a/patches/prefix-abiname/tools-misc-prefix.diff b/patches/prefix-abiname/tools-misc-prefix.diff new file mode 100644 index 0000000000..9674a3e0f6 --- /dev/null +++ b/patches/prefix-abiname/tools-misc-prefix.diff @@ -0,0 +1,33 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:46:59 +0200 +Subject: tools-misc-prefix.diff + +Patch-Name: tools-misc-prefix.diff + +--- + +--- a/tools/misc/Makefile ++++ b/tools/misc/Makefile +@@ -55,18 +55,16 @@ all build: $(TARGETS_BUILD) + + .PHONY: install + install: build +- $(INSTALL_DIR) $(DESTDIR)$(bindir) +- $(INSTALL_DIR) $(DESTDIR)$(sbindir) + $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN) +- $(INSTALL_PYTHON_PROG) $(INSTALL_BIN) $(DESTDIR)$(bindir) +- $(INSTALL_PYTHON_PROG) $(INSTALL_SBIN) $(DESTDIR)$(sbindir) ++ $(INSTALL_PYTHON_PROG) $(INSTALL_BIN) $(DESTDIR)$(LIBEXEC_BIN) ++ $(INSTALL_PYTHON_PROG) $(INSTALL_SBIN) $(DESTDIR)$(LIBEXEC_BIN) + $(INSTALL_PYTHON_PROG) $(INSTALL_PRIVBIN) $(DESTDIR)$(LIBEXEC_BIN) + + .PHONY: uninstall + uninstall: + rm -f $(addprefix $(DESTDIR)$(LIBEXEC_BIN)/, $(INSTALL_PRIVBIN)) +- rm -f $(addprefix $(DESTDIR)$(sbindir)/, $(INSTALL_SBIN)) +- rm -f $(addprefix $(DESTDIR)$(bindir)/, $(INSTALL_BIN)) ++ rm -f $(addprefix $(DESTDIR)$(LIBEXEC_BIN)/, $(INSTALL_SBIN)) ++ rm -f $(addprefix $(DESTDIR)$(LIBEXEC_BIN)/, $(INSTALL_BIN)) + + .PHONY: clean + clean: diff --git a/patches/prefix-abiname/tools-pygrub-prefix.diff b/patches/prefix-abiname/tools-pygrub-prefix.diff new file mode 100644 index 0000000000..bcb8770e25 --- /dev/null +++ b/patches/prefix-abiname/tools-pygrub-prefix.diff @@ -0,0 +1,49 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:47:01 +0200 +Subject: tools-pygrub-prefix.diff + +Patch-Name: tools-pygrub-prefix.diff + +--- + +--- a/tools/pygrub/Makefile ++++ b/tools/pygrub/Makefile +@@ -18,11 +18,6 @@ install: all + CC="$(CC)" CFLAGS="$(PY_CFLAGS)" LDFLAGS="$(PY_LDFLAGS)" $(PYTHON) \ + setup.py install --record $(INSTALL_LOG) $(PYTHON_PREFIX_ARG) \ + --root="$(DESTDIR)" --install-scripts=$(LIBEXEC_BIN) --force +- set -e; if [ $(bindir) != $(LIBEXEC_BIN) -a \ +- "`readlink -f $(DESTDIR)/$(bindir)`" != \ +- "`readlink -f $(LIBEXEC_BIN)`" ]; then \ +- ln -sf $(LIBEXEC_BIN)/pygrub $(DESTDIR)/$(bindir); \ +- fi + + .PHONY: uninstall + uninstall: +--- a/tools/pygrub/setup.py ++++ b/tools/pygrub/setup.py +@@ -4,11 +4,13 @@ import os + import sys + + extra_compile_args = [ "-fno-strict-aliasing", "-Werror" ] ++extra_link_args = [ "-Wl,-rpath,${ORIGIN}/.." ] + + XEN_ROOT = "../.." + + fsimage = Extension("fsimage", + extra_compile_args = extra_compile_args, ++ extra_link_args = extra_link_args, + include_dirs = [ XEN_ROOT + "/tools/libfsimage/common/" ], + library_dirs = [ XEN_ROOT + "/tools/libfsimage/common/" ], + libraries = ["fsimage"], +--- a/tools/pygrub/src/pygrub ++++ b/tools/pygrub/src/pygrub +@@ -21,6 +21,8 @@ import xen.lowlevel.xc + import curses, _curses, curses.wrapper, curses.textpad, curses.ascii + import getopt + ++sys.path.insert(1, sys.path[0] + '/../lib/python') ++ + import fsimage + import grub.GrubConf + import grub.LiloConf diff --git a/patches/prefix-abiname/tools-python-prefix.diff b/patches/prefix-abiname/tools-python-prefix.diff new file mode 100644 index 0000000000..48375b7a50 --- /dev/null +++ b/patches/prefix-abiname/tools-python-prefix.diff @@ -0,0 +1,32 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:47:02 +0200 +Subject: tools-python-prefix.diff + +Patch-Name: tools-python-prefix.diff + +--- + +--- a/tools/python/setup.py ++++ b/tools/python/setup.py +@@ -5,6 +5,7 @@ import os, sys + XEN_ROOT = "../.." + + extra_compile_args = [ "-fno-strict-aliasing", "-Werror" ] ++extra_link_args = [ "-Wl,-rpath,${ORIGIN}/../../.." ] + + PATH_XEN = XEN_ROOT + "/tools/include" + PATH_LIBXENTOOLLOG = XEN_ROOT + "/tools/libs/toollog" +@@ -23,11 +24,12 @@ xc = Extension("xc", + library_dirs = [ PATH_LIBXC ], + libraries = [ "xenctrl", "xenguest" ], + depends = [ PATH_LIBXC + "/libxenctrl.so", PATH_LIBXC + "/libxenguest.so" ], +- extra_link_args = [ "-Wl,-rpath-link="+PATH_LIBXENTOOLLOG ], ++ extra_link_args = extra_link_args + [ "-Wl,-rpath-link="+PATH_LIBXENTOOLLOG ], + sources = [ "xen/lowlevel/xc/xc.c" ]) + + xs = Extension("xs", + extra_compile_args = extra_compile_args, ++ extra_link_args = extra_link_args, + include_dirs = [ PATH_XEN, PATH_XENSTORE + "/include", "xen/lowlevel/xs" ], + library_dirs = [ PATH_XENSTORE ], + libraries = [ "xenstore" ], diff --git a/patches/prefix-abiname/tools-rpath.diff b/patches/prefix-abiname/tools-rpath.diff new file mode 100644 index 0000000000..8c2c7099e5 --- /dev/null +++ b/patches/prefix-abiname/tools-rpath.diff @@ -0,0 +1,19 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:46:51 +0200 +Subject: tools-rpath.diff + +Patch-Name: tools-rpath.diff + +--- + +--- a/tools/Rules.mk ++++ b/tools/Rules.mk +@@ -9,6 +9,8 @@ include $(XEN_ROOT)/Config.mk + export _INSTALL := $(INSTALL) + INSTALL = $(XEN_ROOT)/tools/cross-install + ++LDFLAGS_RPATH = -Wl,-rpath,'$${ORIGIN}$(if $(1),/$(1))' ++ + XEN_INCLUDE = $(XEN_ROOT)/tools/include + XEN_LIBXENTOOLCORE = $(XEN_ROOT)/tools/libs/toolcore + XEN_LIBXENTOOLLOG = $(XEN_ROOT)/tools/libs/toollog diff --git a/patches/prefix-abiname/tools-xcutils-rpath.diff b/patches/prefix-abiname/tools-xcutils-rpath.diff new file mode 100644 index 0000000000..6e7db6a40b --- /dev/null +++ b/patches/prefix-abiname/tools-xcutils-rpath.diff @@ -0,0 +1,19 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:47:05 +0200 +Subject: tools-xcutils-rpath.diff + +Patch-Name: tools-xcutils-rpath.diff + +--- + +--- a/tools/xcutils/Makefile ++++ b/tools/xcutils/Makefile +@@ -19,6 +19,8 @@ CFLAGS += -Werror + CFLAGS_readnotes.o := $(CFLAGS_libxenevtchn) $(CFLAGS_libxenctrl) $(CFLAGS_libxenguest) -I$(XEN_ROOT)/tools/libxc $(CFLAGS_libxencall) + CFLAGS_lsevtchn.o := $(CFLAGS_libxenevtchn) $(CFLAGS_libxenctrl) + ++APPEND_LDFLAGS += $(call LDFLAGS_RPATH,../lib) ++ + .PHONY: all + all: build + diff --git a/patches/prefix-abiname/tools-xenmon-prefix.diff b/patches/prefix-abiname/tools-xenmon-prefix.diff new file mode 100644 index 0000000000..d42909df68 --- /dev/null +++ b/patches/prefix-abiname/tools-xenmon-prefix.diff @@ -0,0 +1,42 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:47:06 +0200 +Subject: tools-xenmon-prefix.diff + +Patch-Name: tools-xenmon-prefix.diff + +--- + +--- a/tools/xenmon/Makefile ++++ b/tools/xenmon/Makefile +@@ -18,6 +18,7 @@ CFLAGS += $(CFLAGS_libxenevtchn) + CFLAGS += $(CFLAGS_libxenctrl) + LDLIBS += $(LDLIBS_libxenctrl) + LDLIBS += $(LDLIBS_libxenevtchn) ++LDFLAGS += $(call LDFLAGS_RPATH,../lib) + + SCRIPTS = xenmon.py + +@@ -29,16 +30,16 @@ build: xentrace_setmask xenbaked + + .PHONY: install + install: build +- $(INSTALL_DIR) $(DESTDIR)$(sbindir) +- $(INSTALL_PROG) xenbaked $(DESTDIR)$(sbindir)/xenbaked +- $(INSTALL_PROG) xentrace_setmask $(DESTDIR)$(sbindir)/xentrace_setmask +- $(INSTALL_PROG) xenmon.py $(DESTDIR)$(sbindir)/xenmon.py ++ $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN) ++ $(INSTALL_PROG) xenbaked $(DESTDIR)$(LIBEXEC_BIN)/xenbaked ++ $(INSTALL_PROG) xentrace_setmask $(DESTDIR)$(LIBEXEC_BIN)/xentrace_setmask ++ $(INSTALL_PROG) xenmon.py $(DESTDIR)$(LIBEXEC_BIN)/xenmon.py + + .PHONY: uninstall + uninstall: +- rm -f $(DESTDIR)$(sbindir)/xenbaked +- rm -f $(DESTDIR)$(sbindir)/xentrace_setmask +- rm -f $(DESTDIR)$(sbindir)/xenmon.py ++ rm -f $(DESTDIR)$(LIBEXEC_BIN)/xenbaked ++ rm -f $(DESTDIR)$(LIBEXEC_BIN)/xentrace_setmask ++ rm -f $(DESTDIR)$(LIBEXEC_BIN)/xenmon.py + + .PHONY: clean + clean: diff --git a/patches/prefix-abiname/tools-xenpaging-prefix.diff b/patches/prefix-abiname/tools-xenpaging-prefix.diff new file mode 100644 index 0000000000..7cdd3ae978 --- /dev/null +++ b/patches/prefix-abiname/tools-xenpaging-prefix.diff @@ -0,0 +1,19 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:47:08 +0200 +Subject: tools-xenpaging-prefix.diff + +Patch-Name: tools-xenpaging-prefix.diff + +--- + +--- a/tools/xenpaging/Makefile ++++ b/tools/xenpaging/Makefile +@@ -4,7 +4,7 @@ include $(XEN_ROOT)/tools/Rules.mk + # xenpaging.c and file_ops.c incorrectly use libxc internals + CFLAGS += $(CFLAGS_libxentoollog) $(CFLAGS_libxenevtchn) $(CFLAGS_libxenctrl) $(CFLAGS_libxenstore) $(PTHREAD_CFLAGS) -I$(XEN_ROOT)/tools/libxc $(CFLAGS_libxencall) + LDLIBS += $(LDLIBS_libxentoollog) $(LDLIBS_libxenevtchn) $(LDLIBS_libxenctrl) $(LDLIBS_libxenstore) $(PTHREAD_LIBS) +-LDFLAGS += $(PTHREAD_LDFLAGS) ++LDFLAGS += $(PTHREAD_LDFLAGS) $(call LDFLAGS_RPATH,../lib) + + POLICY = default + diff --git a/patches/prefix-abiname/tools-xenpmd-prefix.diff b/patches/prefix-abiname/tools-xenpmd-prefix.diff new file mode 100644 index 0000000000..80cefffe06 --- /dev/null +++ b/patches/prefix-abiname/tools-xenpmd-prefix.diff @@ -0,0 +1,30 @@ +From: Bastian Blank +Date: Sat, 13 Dec 2014 19:37:02 +0100 +Subject: tools-xenpmd-prefix.diff + +Patch-Name: tools-xenpmd-prefix.diff + +--- + +--- a/tools/xenpmd/Makefile ++++ b/tools/xenpmd/Makefile +@@ -11,8 +11,8 @@ all: xenpmd + + .PHONY: install + install: all +- $(INSTALL_DIR) $(DESTDIR)$(sbindir) +- $(INSTALL_PROG) xenpmd $(DESTDIR)$(sbindir) ++ $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN) ++ $(INSTALL_PROG) xenpmd $(DESTDIR)$(LIBEXEC_BIN) + + .PHONY: clean + clean: +@@ -23,7 +23,7 @@ distclean: clean + + .PHONY: uninstall + uninstall: +- rm -f $(DESTDIR)$(sbindir)/xenpmd ++ rm -f $(DESTDIR)$(LIBEXEC_BIN)/xenpmd + + xenpmd: xenpmd.o Makefile + $(CC) $(LDFLAGS) $< -o $@ $(LDLIBS) $(APPEND_LDFLAGS) diff --git a/patches/prefix-abiname/tools-xenstat-abiname.diff b/patches/prefix-abiname/tools-xenstat-abiname.diff new file mode 100644 index 0000000000..f01d9cff8c --- /dev/null +++ b/patches/prefix-abiname/tools-xenstat-abiname.diff @@ -0,0 +1,79 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:46:50 +0200 +Subject: tools-xenstat-abiname.diff + +Patch-Name: tools-xenstat-abiname.diff + +--- + +--- a/tools/xenstat/libxenstat/Makefile ++++ b/tools/xenstat/libxenstat/Makefile +@@ -18,18 +18,14 @@ include $(XEN_ROOT)/tools/Rules.mk + LDCONFIG=ldconfig + MAKE_LINK=ln -sf + +-MAJOR=0 +-MINOR=0 +- + LIB=src/libxenstat.a +-SHLIB=src/libxenstat.so.$(MAJOR).$(MINOR) +-SHLIB_LINKS=src/libxenstat.so.$(MAJOR) src/libxenstat.so +-OBJECTS-y=src/xenstat.o src/xenstat_qmp.o ++SHLIB=src/libxenstat.so ++OBJECTS-y=src/xenstat.o + OBJECTS-$(CONFIG_Linux) += src/xenstat_linux.o + OBJECTS-$(CONFIG_SunOS) += src/xenstat_solaris.o + OBJECTS-$(CONFIG_NetBSD) += src/xenstat_netbsd.o + OBJECTS-$(CONFIG_FreeBSD) += src/xenstat_freebsd.o +-SONAME_FLAGS=-Wl,$(SONAME_LDFLAG) -Wl,libxenstat.so.$(MAJOR) ++SONAME_FLAGS=-Wl,$(SONAME_LDFLAG),libxenstat.so + + CFLAGS+=-fPIC + CFLAGS+=-Isrc $(CFLAGS_libxenctrl) $(CFLAGS_libxenstore) $(CFLAGS_xeninclude) -include $(XEN_ROOT)/tools/config.h +@@ -38,7 +34,7 @@ LDLIBS-y = $(LDLIBS_libxenstore) $(LDLIB + LDLIBS-$(CONFIG_SunOS) += -lkstat + + PKG_CONFIG := xenstat.pc +-PKG_CONFIG_VERSION := $(MAJOR).$(MINOR) ++PKG_CONFIG_VERSION := $(PACKAGE_VERSION) + + ifneq ($(CONFIG_LIBXC_MINIOS),y) + PKG_CONFIG_INST := $(PKG_CONFIG) +@@ -54,7 +50,7 @@ $(PKG_CONFIG_LOCAL): PKG_CONFIG_INCDIR = + $(PKG_CONFIG_LOCAL): PKG_CONFIG_LIBDIR = $(CURDIR) + + .PHONY: all +-all: $(LIB) $(SHLIB) $(SHLIB_LINKS) $(PKG_CONFIG_INST) $(PKG_CONFIG_LOCAL) ++all: $(LIB) $(SHLIB) $(PKG_CONFIG_INST) $(PKG_CONFIG_LOCAL) + + $(OBJECTS-y): src/_paths.h + +@@ -66,27 +62,17 @@ $(SHLIB): $(OBJECTS-y) + $(CC) $(LDFLAGS) $(SONAME_FLAGS) $(SHLIB_LDFLAGS) -o $@ \ + $(OBJECTS-y) $(LDLIBS-y) $(APPEND_LDFLAGS) + +-src/libxenstat.so.$(MAJOR): $(SHLIB) +- $(MAKE_LINK) $( +Date: Sat, 5 Jul 2014 11:47:09 +0200 +Subject: tools-xenstat-prefix.diff + +Patch-Name: tools-xenstat-prefix.diff + +--- + +--- a/tools/xenstat/libxenstat/Makefile ++++ b/tools/xenstat/libxenstat/Makefile +@@ -20,7 +20,7 @@ MAKE_LINK=ln -sf + + LIB=src/libxenstat.a + SHLIB=src/libxenstat.so +-OBJECTS-y=src/xenstat.o ++OBJECTS-y=src/xenstat.o src/xenstat_qmp.o + OBJECTS-$(CONFIG_Linux) += src/xenstat_linux.o + OBJECTS-$(CONFIG_SunOS) += src/xenstat_solaris.o + OBJECTS-$(CONFIG_NetBSD) += src/xenstat_netbsd.o +@@ -64,17 +64,19 @@ $(SHLIB): $(OBJECTS-y) + + .PHONY: install + install: all ++ $(INSTALL_DIR) $(DESTDIR)$(includedir) ++ $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_LIB) + $(INSTALL_DATA) src/xenstat.h $(DESTDIR)$(includedir) + $(INSTALL_DATA) $(LIB) $(DESTDIR)$(libdir)/libxenstat.a +- $(INSTALL_PROG) src/libxenstat.so $(DESTDIR)$(libdir) ++ $(INSTALL_PROG) src/libxenstat.so $(DESTDIR)$(LIBEXEC_LIB) + $(INSTALL_DATA) xenstat.pc $(DESTDIR)$(PKG_INSTALLDIR) + + .PHONY: uninstall + uninstall: + rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xenstat.pc +- rm -f $(DESTDIR)$(libdir)/libxenstat.so ++ rm -f $(DESTDIR)$(LIBEXEC_LIB)/libxenstat.so + rm -f $(DESTDIR)$(libdir)/libxenstat.a +- rm -f $(DESTDIR)$(includedir)/xenstat.h ++ rm -f $(DESTDIR)$(LIBEXEC_LIB)/xenstat.h + + PYLIB=bindings/swig/python/_xenstat.so + PYMOD=bindings/swig/python/xenstat.py +--- a/tools/xenstat/xentop/Makefile ++++ b/tools/xenstat/xentop/Makefile +@@ -19,7 +19,9 @@ all install xentop uninstall: + else + + CFLAGS += -DGCC_PRINTF -Werror $(CFLAGS_libxenstat) ++LDFLAGS += $(call LDFLAGS_RPATH,../lib) + LDLIBS += $(LDLIBS_libxenstat) $(CURSES_LIBS) $(TINFO_LIBS) $(SOCKET_LIBS) -lm ++LDLIBS += $(LDLIBS_libxenctrl) $(LDLIBS_libxenstore) + CFLAGS += -DHOST_$(XEN_OS) + + # Include configure output (config.h) +@@ -31,12 +33,12 @@ all: xentop + + .PHONY: install + install: xentop +- $(INSTALL_DIR) $(DESTDIR)$(sbindir) +- $(INSTALL_PROG) xentop $(DESTDIR)$(sbindir)/xentop ++ $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN) ++ $(INSTALL_PROG) xentop $(DESTDIR)$(LIBEXEC_BIN)/xentop + + .PHONY: uninstall + uninstall: +- rm -f $(DESTDIR)$(sbindir)/xentop ++ rm -f $(DESTDIR)$(LIBEXEC_BIN)/xentop + + endif + diff --git a/patches/prefix-abiname/tools-xenstore-prefix.diff b/patches/prefix-abiname/tools-xenstore-prefix.diff new file mode 100644 index 0000000000..4f529cc45c --- /dev/null +++ b/patches/prefix-abiname/tools-xenstore-prefix.diff @@ -0,0 +1,68 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:47:12 +0200 +Subject: tools-xenstore-prefix.diff + +Patch-Name: tools-xenstore-prefix.diff + +--- + +--- a/tools/helpers/Makefile ++++ b/tools/helpers/Makefile +@@ -31,7 +31,7 @@ xen-init-dom0: $(XEN_INIT_DOM0_OBJS) + $(INIT_XENSTORE_DOMAIN_OBJS): _paths.h + + init-xenstore-domain: $(INIT_XENSTORE_DOMAIN_OBJS) +- $(CC) $(LDFLAGS) -o $@ $(INIT_XENSTORE_DOMAIN_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxenstore) $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(LDLIBS_libxenlight) $(APPEND_LDFLAGS) ++ $(CC) $(LDFLAGS) -o $@ $(INIT_XENSTORE_DOMAIN_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxenstore) $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(LDLIBS_libxenlight) $(call LDFLAGS_RPATH,../lib) $(APPEND_LDFLAGS) + + .PHONY: install + install: all +--- a/tools/xenstore/Makefile ++++ b/tools/xenstore/Makefile +@@ -18,6 +18,8 @@ CFLAGS += -DXEN_RUN_STORED="\"$(XEN_RUN_ + CFLAGS += $(CFLAGS-y) + LDFLAGS += $(LDFLAGS-y) + ++LDFLAGS_libxenctrl += $(call LDFLAGS_RPATH,../lib) ++ + CLIENTS := xenstore-exists xenstore-list xenstore-read xenstore-rm xenstore-chmod + CLIENTS += xenstore-write xenstore-ls xenstore-watch + +@@ -79,7 +81,7 @@ endif + $(XENSTORED_OBJS): CFLAGS += $(CFLAGS_libxengnttab) + + xenstored: $(XENSTORED_OBJS) +- $(CC) $^ $(LDFLAGS) $(LDLIBS_libxenevtchn) $(LDLIBS_libxengnttab) $(LDLIBS_libxenctrl) $(LDLIBS_xenstored) $(SOCKET_LIBS) -o $@ $(APPEND_LDFLAGS) ++ $(CC) $^ $(LDFLAGS) $(LDLIBS_libxenevtchn) $(LDLIBS_libxengnttab) $(LDLIBS_libxenctrl) $(LDLIBS_xenstored) $(SOCKET_LIBS) $(call LDFLAGS_RPATH,../lib) -o $@ $(APPEND_LDFLAGS) + + xenstored.a: $(XENSTORED_OBJS) + $(AR) cr $@ $^ +@@ -158,13 +160,13 @@ tarball: clean + install: all + $(INSTALL_DIR) $(DESTDIR)$(bindir) + $(INSTALL_DIR) $(DESTDIR)$(includedir) ++ $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN) + $(INSTALL_DIR) $(DESTDIR)$(includedir)/xenstore-compat + ifeq ($(XENSTORE_XENSTORED),y) +- $(INSTALL_DIR) $(DESTDIR)$(sbindir) + $(INSTALL_DIR) $(DESTDIR)$(XEN_LIB_STORED) +- $(INSTALL_PROG) xenstored $(DESTDIR)$(sbindir) ++ $(INSTALL_PROG) xenstored $(DESTDIR)$(LIBEXEC_BIN) + endif +- $(INSTALL_PROG) xenstore-control $(DESTDIR)$(bindir) ++ $(INSTALL_PROG) xenstore-control $(DESTDIR)$(LIBEXEC_BIN) + $(INSTALL_PROG) xenstore $(DESTDIR)$(bindir) + set -e ; for c in $(CLIENTS) ; do \ + ln -f $(DESTDIR)$(bindir)/xenstore $(DESTDIR)$(bindir)/$${c} ; \ +@@ -197,9 +199,9 @@ uninstall: + rm -f $(DESTDIR)$(libdir)/libxenstore.so.$(MAJOR).$(MINOR) + rm -f $(addprefix $(DESTDIR)$(bindir)/, $(CLIENTS)) + rm -f $(DESTDIR)$(bindir)/xenstore +- rm -f $(DESTDIR)$(bindir)/xenstore-control ++ rm -f $(DESTDIR)$(LIBEXEC_BIN)/xenstore-control + ifeq ($(XENSTORE_XENSTORED),y) +- rm -f $(DESTDIR)$(sbindir)/xenstored ++ rm -f $(DESTDIR)$(LIBEXEC_BIN)/xenstored + if [ -d $(DESTDIR)$(XEN_LIB_STORED) ]; then \ + rmdir --ignore-fail-on-non-empty $(DESTDIR)$(XEN_LIB_STORED); \ + fi diff --git a/patches/prefix-abiname/tools-xentoolcore-abiname.patch b/patches/prefix-abiname/tools-xentoolcore-abiname.patch new file mode 100644 index 0000000000..11a2653b4a --- /dev/null +++ b/patches/prefix-abiname/tools-xentoolcore-abiname.patch @@ -0,0 +1,52 @@ +--- a/tools/libs/toolcore/Makefile ++++ b/tools/libs/toolcore/Makefile +@@ -59,22 +59,22 @@ include/_xentoolcore_list.h: $(XEN_INCLU + libxentoolcore.a: $(LIB_OBJS) + $(AR) rc $@ $^ + +-libxentoolcore.so: libxentoolcore.so.$(MAJOR) ++libxentoolcore.so: libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR) + $(SYMLINK_SHLIB) $< $@ +-libxentoolcore.so.$(MAJOR): libxentoolcore.so.$(MAJOR).$(MINOR) ++libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR): libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) + $(SYMLINK_SHLIB) $< $@ + +-libxentoolcore.so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxentoolcore.map +- $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxentoolcore.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(APPEND_LDFLAGS) ++libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxentoolcore.map ++ $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(APPEND_LDFLAGS) + + .PHONY: install + install: build + $(INSTALL_DIR) $(DESTDIR)$(libdir) + $(INSTALL_DIR) $(DESTDIR)$(includedir) +- $(INSTALL_SHLIB) libxentoolcore.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir) ++ $(INSTALL_SHLIB) libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir) + $(INSTALL_DATA) libxentoolcore.a $(DESTDIR)$(libdir) +- $(SYMLINK_SHLIB) libxentoolcore.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxentoolcore.so.$(MAJOR) +- $(SYMLINK_SHLIB) libxentoolcore.so.$(MAJOR) $(DESTDIR)$(libdir)/libxentoolcore.so ++ $(SYMLINK_SHLIB) libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR) ++ $(SYMLINK_SHLIB) libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR) $(DESTDIR)$(libdir)/libxentoolcore.so + $(INSTALL_DATA) include/xentoolcore.h $(DESTDIR)$(includedir) + $(INSTALL_DATA) xentoolcore.pc $(DESTDIR)$(PKG_INSTALLDIR) + +@@ -83,8 +83,8 @@ uninstall: + rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xentoolcore.pc + rm -f $(DESTDIR)$(includedir)/xentoolcore.h + rm -f $(DESTDIR)$(libdir)/libxentoolcore.so +- rm -f $(DESTDIR)$(libdir)/libxentoolcore.so.$(MAJOR) +- rm -f $(DESTDIR)$(libdir)/libxentoolcore.so.$(MAJOR).$(MINOR) ++ rm -f $(DESTDIR)$(libdir)/libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR) ++ rm -f $(DESTDIR)$(libdir)/libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) + rm -f $(DESTDIR)$(libdir)/libxentoolcore.a + + .PHONY: TAGS +@@ -94,7 +94,7 @@ TAGS: + .PHONY: clean + clean: + rm -rf *.rpm $(LIB) *~ $(DEPS_RM) $(LIB_OBJS) $(PIC_OBJS) +- rm -f libxentoolcore.so.$(MAJOR).$(MINOR) libxentoolcore.so.$(MAJOR) ++ rm -f libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR) + rm -f headers.chk + rm -f xentoolcore.pc + diff --git a/patches/prefix-abiname/tools-xentrace-prefix.diff b/patches/prefix-abiname/tools-xentrace-prefix.diff new file mode 100644 index 0000000000..02caac0cf0 --- /dev/null +++ b/patches/prefix-abiname/tools-xentrace-prefix.diff @@ -0,0 +1,46 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:47:14 +0200 +Subject: tools-xentrace-prefix.diff + +Patch-Name: tools-xentrace-prefix.diff + +--- + +--- a/tools/xentrace/Makefile ++++ b/tools/xentrace/Makefile +@@ -8,6 +8,7 @@ CFLAGS += $(CFLAGS_libxenctrl) + LDLIBS += $(LDLIBS_libxenevtchn) + LDLIBS += $(LDLIBS_libxenctrl) + LDLIBS += $(ARGP_LDFLAGS) ++LDFLAGS += $(call LDFLAGS_RPATH,../lib) + + BIN-$(CONFIG_X86) = xenalyze + BIN = $(BIN-y) +@@ -23,21 +24,19 @@ build: $(BIN) $(SBIN) $(LIBBIN) + + .PHONY: install + install: build +- $(INSTALL_DIR) $(DESTDIR)$(bindir) +- $(INSTALL_DIR) $(DESTDIR)$(sbindir) +- [ -z "$(LIBBIN)" ] || $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN) ++ $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN) + ifneq ($(BIN),) +- $(INSTALL_PROG) $(BIN) $(DESTDIR)$(bindir) ++ $(INSTALL_PROG) $(BIN) $(DESTDIR)$(LIBEXEC_BIN) + endif +- $(INSTALL_PROG) $(SBIN) $(DESTDIR)$(sbindir) +- $(INSTALL_PYTHON_PROG) $(SCRIPTS) $(DESTDIR)$(bindir) ++ $(INSTALL_PROG) $(SBIN) $(DESTDIR)$(LIBEXEC_BIN) ++ $(INSTALL_PYTHON_PROG) $(SCRIPTS) $(DESTDIR)$(LIBEXEC_BIN) + [ -z "$(LIBBIN)" ] || $(INSTALL_PROG) $(LIBBIN) $(DESTDIR)$(LIBEXEC_BIN) + + .PHONY: uninstall + uninstall: + rm -f $(addprefix $(DESTDIR)$(LIBEXEC_BIN)/, $(LIBBIN)) +- rm -f $(addprefix $(DESTDIR)$(bindir)/, $(SCRIPTS)) +- rm -f $(addprefix $(DESTDIR)$(sbindir)/, $(SBIN)) ++ rm -f $(addprefix $(DESTDIR)$(LIBEXEC_BIN)/, $(SCRIPTS)) ++ rm -f $(addprefix $(DESTDIR)$(LIBEXEC_BIN)/, $(SBIN)) + ifneq ($(BIN),) + rm -f $(addprefix $(DESTDIR)$(bindir)/, $(BIN)) + endif diff --git a/patches/prefix-abiname/ubuntu-tools-libs-abiname.diff b/patches/prefix-abiname/ubuntu-tools-libs-abiname.diff new file mode 100644 index 0000000000..2af18378a0 --- /dev/null +++ b/patches/prefix-abiname/ubuntu-tools-libs-abiname.diff @@ -0,0 +1,308 @@ +From: Ubuntu Developers +Date: Thu, 6 Oct 2016 14:24:46 +0100 +Subject: ubuntu-tools-libs-abiname + + +--- + +--- a/tools/libs/call/Makefile ++++ b/tools/libs/call/Makefile +@@ -56,22 +56,22 @@ headers.chk: $(wildcard include/*.h) + libxencall.a: $(LIB_OBJS) + $(AR) rc $@ $^ + +-libxencall.so: libxencall.so.$(MAJOR) ++libxencall.so: libxencall-$(PACKAGE_VERSION).so.$(MAJOR) + $(SYMLINK_SHLIB) $< $@ +-libxencall.so.$(MAJOR): libxencall.so.$(MAJOR).$(MINOR) ++libxencall-$(PACKAGE_VERSION).so.$(MAJOR): libxencall-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) + $(SYMLINK_SHLIB) $< $@ + +-libxencall.so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxencall.map +- $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxencall.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS) ++libxencall-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxencall.map ++ $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxencall-$(PACKAGE_VERSION).so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS) + + .PHONY: install + install: build + $(INSTALL_DIR) $(DESTDIR)$(libdir) + $(INSTALL_DIR) $(DESTDIR)$(includedir) +- $(INSTALL_SHLIB) libxencall.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir) ++ $(INSTALL_SHLIB) libxencall-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir) + $(INSTALL_DATA) libxencall.a $(DESTDIR)$(libdir) +- $(SYMLINK_SHLIB) libxencall.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxencall.so.$(MAJOR) +- $(SYMLINK_SHLIB) libxencall.so.$(MAJOR) $(DESTDIR)$(libdir)/libxencall.so ++ $(SYMLINK_SHLIB) libxencall-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxencall-$(PACKAGE_VERSION).so.$(MAJOR) ++ $(SYMLINK_SHLIB) libxencall-$(PACKAGE_VERSION).so.$(MAJOR) $(DESTDIR)$(libdir)/libxencall.so + $(INSTALL_DATA) include/xencall.h $(DESTDIR)$(includedir) + $(INSTALL_DATA) xencall.pc $(DESTDIR)$(PKG_INSTALLDIR) + +@@ -80,8 +80,8 @@ uninstall: + rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xencall.pc + rm -f $(DESTDIR)$(includedir)/xencall.h + rm -f $(DESTDIR)$(libdir)/libxencall.so +- rm -f $(DESTDIR)$(libdir)/libxencall.so.$(MAJOR) +- rm -f $(DESTDIR)$(libdir)/libxencall.so.$(MAJOR).$(MINOR) ++ rm -f $(DESTDIR)$(libdir)/libxencall-$(PACKAGE_VERSION).so.$(MAJOR) ++ rm -f $(DESTDIR)$(libdir)/libxencall-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) + rm -f $(DESTDIR)$(libdir)/libxencall.a + + .PHONY: TAGS +@@ -91,7 +91,7 @@ TAGS: + .PHONY: clean + clean: + rm -rf *.rpm $(LIB) *~ $(DEPS_RM) $(LIB_OBJS) $(PIC_OBJS) +- rm -f libxencall.so.$(MAJOR).$(MINOR) libxencall.so.$(MAJOR) ++ rm -f libxencall-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) libxencall-$(PACKAGE_VERSION).so.$(MAJOR) + rm -f headers.chk + rm -f xencall.pc + +--- a/tools/libs/toollog/Makefile ++++ b/tools/libs/toollog/Makefile +@@ -50,22 +50,22 @@ headers.chk: $(wildcard include/*.h) + libxentoollog.a: $(LIB_OBJS) + $(AR) rc $@ $^ + +-libxentoollog.so: libxentoollog.so.$(MAJOR) ++libxentoollog.so: libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR) + $(SYMLINK_SHLIB) $< $@ +-libxentoollog.so.$(MAJOR): libxentoollog.so.$(MAJOR).$(MINOR) ++libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR): libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) + $(SYMLINK_SHLIB) $< $@ + +-libxentoollog.so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxentoollog.map +- $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxentoollog.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(APPEND_LDFLAGS) ++libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxentoollog.map ++ $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(APPEND_LDFLAGS) + + .PHONY: install + install: build + $(INSTALL_DIR) $(DESTDIR)$(libdir) + $(INSTALL_DIR) $(DESTDIR)$(includedir) +- $(INSTALL_SHLIB) libxentoollog.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir) ++ $(INSTALL_SHLIB) libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir) + $(INSTALL_DATA) libxentoollog.a $(DESTDIR)$(libdir) +- $(SYMLINK_SHLIB) libxentoollog.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxentoollog.so.$(MAJOR) +- $(SYMLINK_SHLIB) libxentoollog.so.$(MAJOR) $(DESTDIR)$(libdir)/libxentoollog.so ++ $(SYMLINK_SHLIB) libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR) ++ $(SYMLINK_SHLIB) libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR) $(DESTDIR)$(libdir)/libxentoollog.so + $(INSTALL_DATA) include/xentoollog.h $(DESTDIR)$(includedir) + $(INSTALL_DATA) xentoollog.pc $(DESTDIR)$(PKG_INSTALLDIR) + +@@ -74,8 +74,8 @@ uninstall: + rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xentoollog.pc + rm -f $(DESTDIR)$(includedir)/xentoollog.h + rm -f $(DESTDIR)$(libdir)/libxentoollog.so +- rm -f $(DESTDIR)$(libdir)/libxentoollog.so.$(MAJOR) +- rm -f $(DESTDIR)$(libdir)/libxentoollog.so.$(MAJOR).$(MINOR) ++ rm -f $(DESTDIR)$(libdir)/libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR) ++ rm -f $(DESTDIR)$(libdir)/libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) + rm -f $(DESTDIR)$(libdir)/libxentoollog.a + + .PHONY: TAGS +@@ -85,7 +85,7 @@ TAGS: + .PHONY: clean + clean: + rm -rf *.rpm $(LIB) *~ $(DEPS_RM) $(LIB_OBJS) $(PIC_OBJS) +- rm -f libxentoollog.so.$(MAJOR).$(MINOR) libxentoollog.so.$(MAJOR) ++ rm -f libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR) + rm -f headers.chk + rm -f xentoollog.pc + +--- a/tools/libs/evtchn/Makefile ++++ b/tools/libs/evtchn/Makefile +@@ -55,22 +55,22 @@ headers.chk: $(wildcard include/*.h) + libxenevtchn.a: $(LIB_OBJS) + $(AR) rc $@ $^ + +-libxenevtchn.so: libxenevtchn.so.$(MAJOR) ++libxenevtchn.so: libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR) + $(SYMLINK_SHLIB) $< $@ +-libxenevtchn.so.$(MAJOR): libxenevtchn.so.$(MAJOR).$(MINOR) ++libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR): libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) + $(SYMLINK_SHLIB) $< $@ + +-libxenevtchn.so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxenevtchn.map +- $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenevtchn.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS) ++libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxenevtchn.map ++ $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS) + + .PHONY: install + install: build + $(INSTALL_DIR) $(DESTDIR)$(libdir) + $(INSTALL_DIR) $(DESTDIR)$(includedir) +- $(INSTALL_SHLIB) libxenevtchn.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir) ++ $(INSTALL_SHLIB) libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir) + $(INSTALL_DATA) libxenevtchn.a $(DESTDIR)$(libdir) +- $(SYMLINK_SHLIB) libxenevtchn.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxenevtchn.so.$(MAJOR) +- $(SYMLINK_SHLIB) libxenevtchn.so.$(MAJOR) $(DESTDIR)$(libdir)/libxenevtchn.so ++ $(SYMLINK_SHLIB) libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR) ++ $(SYMLINK_SHLIB) libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR) $(DESTDIR)$(libdir)/libxenevtchn.so + $(INSTALL_DATA) include/xenevtchn.h $(DESTDIR)$(includedir) + $(INSTALL_DATA) xenevtchn.pc $(DESTDIR)$(PKG_INSTALLDIR) + +@@ -79,7 +79,7 @@ uninstall: + rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xenevtchn.pc + rm -f $(DESTDIR)$(includedir)/xenevtchn.h + rm -f $(DESTDIR)$(libdir)/libxenevtchn.so +- rm -f $(DESTDIR)$(libdir)/libxenevtchn.so.$(MAJOR) ++ rm -f $(DESTDIR)$(libdir)/libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR) + rm -f $(DESTDIR)$(libdir)/libxenevtchn.so.$(MAJOR).$(MINOR) + rm -f $(DESTDIR)$(libdir)/libxenevtchn.a + +--- a/tools/libs/foreignmemory/Makefile ++++ b/tools/libs/foreignmemory/Makefile +@@ -56,22 +56,22 @@ headers.chk: $(wildcard include/*.h) + libxenforeignmemory.a: $(LIB_OBJS) + $(AR) rc $@ $^ + +-libxenforeignmemory.so: libxenforeignmemory.so.$(MAJOR) ++libxenforeignmemory.so: libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR) + $(SYMLINK_SHLIB) $< $@ +-libxenforeignmemory.so.$(MAJOR): libxenforeignmemory.so.$(MAJOR).$(MINOR) ++libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR): libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) + $(SYMLINK_SHLIB) $< $@ + +-libxenforeignmemory.so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxenforeignmemory.map +- $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenforeignmemory.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS) ++libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxenforeignmemory.map ++ $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS) + + .PHONY: install + install: build + $(INSTALL_DIR) $(DESTDIR)$(libdir) + $(INSTALL_DIR) $(DESTDIR)$(includedir) +- $(INSTALL_SHLIB) libxenforeignmemory.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir) ++ $(INSTALL_SHLIB) libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir) + $(INSTALL_DATA) libxenforeignmemory.a $(DESTDIR)$(libdir) +- $(SYMLINK_SHLIB) libxenforeignmemory.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxenforeignmemory.so.$(MAJOR) +- $(SYMLINK_SHLIB) libxenforeignmemory.so.$(MAJOR) $(DESTDIR)$(libdir)/libxenforeignmemory.so ++ $(SYMLINK_SHLIB) libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR) ++ $(SYMLINK_SHLIB) libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR) $(DESTDIR)$(libdir)/libxenforeignmemory.so + $(INSTALL_DATA) include/xenforeignmemory.h $(DESTDIR)$(includedir) + $(INSTALL_DATA) xenforeignmemory.pc $(DESTDIR)$(PKG_INSTALLDIR) + +@@ -80,8 +80,8 @@ uninstall: + rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xenforeignmemory.pc + rm -f $(DESTDIR)$(includedir)/xenforeignmemory.h + rm -f $(DESTDIR)$(libdir)/libxenforeignmemory.so +- rm -f $(DESTDIR)$(libdir)/libxenforeignmemory.so.$(MAJOR) +- rm -f $(DESTDIR)$(libdir)/libxenforeignmemory.so.$(MAJOR).$(MINOR) ++ rm -f $(DESTDIR)$(libdir)/libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR) ++ rm -f $(DESTDIR)$(libdir)/libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) + rm -f $(DESTDIR)$(libdir)/libxenforeignmemory.a + + .PHONY: TAGS +@@ -91,7 +91,7 @@ TAGS: + .PHONY: clean + clean: + rm -rf *.rpm $(LIB) *~ $(DEPS_RM) $(LIB_OBJS) $(PIC_OBJS) +- rm -f libxenforeignmemory.so.$(MAJOR).$(MINOR) libxenforeignmemory.so.$(MAJOR) ++ rm -f libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR) + rm -f headers.chk + rm -f xenforeignmemory.pc + +--- a/tools/libs/gnttab/Makefile ++++ b/tools/libs/gnttab/Makefile +@@ -58,22 +58,22 @@ headers.chk: $(wildcard include/*.h) + libxengnttab.a: $(LIB_OBJS) + $(AR) rc $@ $^ + +-libxengnttab.so: libxengnttab.so.$(MAJOR) ++libxengnttab.so: libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR) + $(SYMLINK_SHLIB) $< $@ +-libxengnttab.so.$(MAJOR): libxengnttab.so.$(MAJOR).$(MINOR) ++libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR): libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) + $(SYMLINK_SHLIB) $< $@ + +-libxengnttab.so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxengnttab.map +- $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxengnttab.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS) ++libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxengnttab.map ++ $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS) + + .PHONY: install + install: build + $(INSTALL_DIR) $(DESTDIR)$(libdir) + $(INSTALL_DIR) $(DESTDIR)$(includedir) +- $(INSTALL_SHLIB) libxengnttab.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir) ++ $(INSTALL_SHLIB) libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir) + $(INSTALL_DATA) libxengnttab.a $(DESTDIR)$(libdir) +- $(SYMLINK_SHLIB) libxengnttab.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxengnttab.so.$(MAJOR) +- $(SYMLINK_SHLIB) libxengnttab.so.$(MAJOR) $(DESTDIR)$(libdir)/libxengnttab.so ++ $(SYMLINK_SHLIB) libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR) ++ $(SYMLINK_SHLIB) libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR) $(DESTDIR)$(libdir)/libxengnttab.so + $(INSTALL_DATA) include/xengnttab.h $(DESTDIR)$(includedir) + $(INSTALL_DATA) xengnttab.pc $(DESTDIR)$(PKG_INSTALLDIR) + +@@ -82,8 +82,8 @@ uninstall: + rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xengnttab.pc + rm -f $(DESTDIR)$(includedir)/xengnttab.h + rm -f $(DESTDIR)$(libdir)/libxengnttab.so +- rm -f $(DESTDIR)$(libdir)/libxengnttab.so.$(MAJOR) +- rm -f $(DESTDIR)$(libdir)/libxengnttab.so.$(MAJOR).$(MINOR) ++ rm -f $(DESTDIR)$(libdir)/libxengnttab.so-$(PACKAGE_VERSION).$(MAJOR) ++ rm -f $(DESTDIR)$(libdir)/libxengnttab.so-$(PACKAGE_VERSION).$(MAJOR).$(MINOR) + rm -f $(DESTDIR)$(libdir)/libxengnttab.a + + .PHONY: TAGS +@@ -93,7 +93,7 @@ TAGS: + .PHONY: clean + clean: + rm -rf *.rpm $(LIB) *~ $(DEPS_RM) $(LIB_OBJS) $(PIC_OBJS) +- rm -f libxengnttab.so.$(MAJOR).$(MINOR) libxengnttab.so.$(MAJOR) ++ rm -f libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR) + rm -f headers.chk + rm -f xengnttab.pc + +--- a/tools/libs/devicemodel/Makefile ++++ b/tools/libs/devicemodel/Makefile +@@ -58,22 +58,22 @@ headers.chk: $(wildcard include/*.h) + libxendevicemodel.a: $(LIB_OBJS) + $(AR) rc $@ $^ + +-libxendevicemodel.so: libxendevicemodel.so.$(MAJOR) ++libxendevicemodel.so: libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR) + $(SYMLINK_SHLIB) $< $@ +-libxendevicemodel.so.$(MAJOR): libxendevicemodel.so.$(MAJOR).$(MINOR) ++libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR): libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) + $(SYMLINK_SHLIB) $< $@ + +-libxendevicemodel.so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxendevicemodel.map +- $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxendevicemodel.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxencall) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS) ++libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxendevicemodel.map ++ $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxencall) $(APPEND_LDFLAGS) + + .PHONY: install + install: build + $(INSTALL_DIR) $(DESTDIR)$(libdir) + $(INSTALL_DIR) $(DESTDIR)$(includedir) +- $(INSTALL_SHLIB) libxendevicemodel.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir) ++ $(INSTALL_SHLIB) libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir) + $(INSTALL_DATA) libxendevicemodel.a $(DESTDIR)$(libdir) +- $(SYMLINK_SHLIB) libxendevicemodel.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxendevicemodel.so.$(MAJOR) +- $(SYMLINK_SHLIB) libxendevicemodel.so.$(MAJOR) $(DESTDIR)$(libdir)/libxendevicemodel.so ++ $(SYMLINK_SHLIB) libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR) ++ $(SYMLINK_SHLIB) libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR) $(DESTDIR)$(libdir)/libxendevicemodel.so + $(INSTALL_DATA) include/xendevicemodel.h $(DESTDIR)$(includedir) + $(INSTALL_DATA) xendevicemodel.pc $(DESTDIR)$(PKG_INSTALLDIR) + +@@ -82,8 +82,8 @@ uninstall: + rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xendevicemodel.pc + rm -f $(DESTDIR)$(includedir)/xendevicemodel.h + rm -f $(DESTDIR)$(libdir)/libxendevicemodel.so +- rm -f $(DESTDIR)$(libdir)/libxendevicemodel.so.$(MAJOR) +- rm -f $(DESTDIR)$(libdir)/libxendevicemodel.so.$(MAJOR).$(MINOR) ++ rm -f $(DESTDIR)$(libdir)/libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR) ++ rm -f $(DESTDIR)$(libdir)/libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) + rm -f $(DESTDIR)$(libdir)/libxendevicemodel.a + + .PHONY: TAGS +@@ -93,7 +93,7 @@ TAGS: + .PHONY: clean + clean: + rm -rf *.rpm $(LIB) *~ $(DEPS_RM) $(LIB_OBJS) $(PIC_OBJS) +- rm -f libxendevicemodel.so.$(MAJOR).$(MINOR) libxendevicemodel.so.$(MAJOR) ++ rm -f libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR) + rm -f headers.chk + rm -f xendevicemodel.pc + diff --git a/patches/series b/patches/series new file mode 100644 index 0000000000..0ee281b073 --- /dev/null +++ b/patches/series @@ -0,0 +1,39 @@ +misc/version.diff + +# +# The following set of patches puts the hypervisor <-> tools ABI version into +# .so file names and changes paths where tools are installed to include this +# version number. +# +prefix-abiname/config-prefix.diff +prefix-abiname/tools-libfsimage-abiname.diff +prefix-abiname/tools-libxc-abiname.diff +prefix-abiname/tools-libxl-abiname.diff +prefix-abiname/tools-xenstat-abiname.diff +prefix-abiname/tools-rpath.diff +prefix-abiname/tools-blktap2-prefix.diff +prefix-abiname/tools-console-prefix.diff +prefix-abiname/tools-libfsimage-prefix.diff +prefix-abiname/tools-libxl-prefix.diff +prefix-abiname/tools-misc-prefix.diff +prefix-abiname/tools-pygrub-prefix.diff +prefix-abiname/tools-python-prefix.diff +prefix-abiname/tools-xcutils-rpath.diff +prefix-abiname/tools-xenmon-prefix.diff +prefix-abiname/tools-xenpaging-prefix.diff +prefix-abiname/tools-xenpmd-prefix.diff +prefix-abiname/tools-xenstat-prefix.diff +prefix-abiname/tools-xenstore-prefix.diff +prefix-abiname/tools-xentrace-prefix.diff +prefix-abiname/ubuntu-tools-libs-abiname.diff +prefix-abiname/tools-xentoolcore-abiname.patch + +misc/tools-include-install.diff +misc/tools-xenmon-install.diff +misc/tools-pygrub-remove-static-solaris-support +misc/toolstestsx86_emulator-pass--no-pie--fno.patch + +xenstore/tools-xenstore-compatibility.diff +xenstore/tools-fake-xs-restrict.patch + +misc/tools-xentop-replace-use-of-deprecated-vwprintw.patch diff --git a/patches/xenstore/tools-fake-xs-restrict.patch b/patches/xenstore/tools-fake-xs-restrict.patch new file mode 100644 index 0000000000..4f5a83b8f8 --- /dev/null +++ b/patches/xenstore/tools-fake-xs-restrict.patch @@ -0,0 +1,37 @@ +Description: Re-introduce fake xs_restrict API call + libxenstore cannot remove an API function without changing its version + number. As long as we want to remain with 3.0 we have to keep it around. + Debian might decide to increment the version at some point but we do not + know how and when. So for now keep the version stable. +Author: Stefan Bader +Forwarded: No + +--- a/tools/xenstore/include/xenstore.h ++++ b/tools/xenstore/include/xenstore.h +@@ -133,6 +133,11 @@ bool xs_mkdir(struct xs_handle *h, xs_tr + bool xs_rm(struct xs_handle *h, xs_transaction_t t, + const char *path); + ++/* Fake function which will always return false (required to let ++ * libxenstore remain at 3.0 version. ++ */ ++bool xs_restrict(struct xs_handle *h, unsigned domid); ++ + /* Get permissions of node (first element is owner, first perms is "other"). + * Returns malloced array, or NULL: call free() after use. + */ +--- a/tools/xenstore/xs.c ++++ b/tools/xenstore/xs.c +@@ -798,6 +798,12 @@ unwind: + return false; + } + ++/* Always return false a functionality has been removed in Xen 4.9 */ ++bool xs_restrict(struct xs_handle *h, unsigned domid) ++{ ++ return false; ++} ++ + /* Watch a node for changes (poll on fd to detect, or call read_watch()). + * When the node (or any child) changes, fd will become readable. + * Token is returned when watch is read, to allow matching. diff --git a/patches/xenstore/tools-xenstore-compatibility.diff b/patches/xenstore/tools-xenstore-compatibility.diff new file mode 100644 index 0000000000..423c86c8ac --- /dev/null +++ b/patches/xenstore/tools-xenstore-compatibility.diff @@ -0,0 +1,52 @@ +From: Bastian Blank +Date: Sat, 5 Jul 2014 11:47:36 +0200 +Subject: tools-xenstore-compatibility.diff + +Patch-Name: tools-xenstore-compatibility.diff + +--- + +--- a/tools/xenstore/include/xenstore.h ++++ b/tools/xenstore/include/xenstore.h +@@ -25,6 +25,7 @@ + + #define XS_OPEN_READONLY 1UL<<0 + #define XS_OPEN_SOCKETONLY 1UL<<1 ++#define XS_OPEN_DOMAINONLY 1UL<<2 + + /* + * Setting XS_UNWATCH_FILTER arranges that after xs_unwatch, no +--- a/tools/xenstore/xenstore_client.c ++++ b/tools/xenstore/xenstore_client.c +@@ -636,7 +636,7 @@ main(int argc, char **argv) + max_width = ws.ws_col - 2; + } + +- xsh = xs_open(socket ? XS_OPEN_SOCKETONLY : 0); ++ xsh = xs_open(socket ? XS_OPEN_SOCKETONLY : XS_OPEN_DOMAINONLY); + if (xsh == NULL) err(1, "xs_open"); + + again: +--- a/tools/xenstore/xs.c ++++ b/tools/xenstore/xs.c +@@ -307,17 +307,19 @@ struct xs_handle *xs_daemon_open_readonl + + struct xs_handle *xs_domain_open(void) + { +- return xs_open(0); ++ return xs_open(XS_OPEN_DOMAINONLY); + } + + struct xs_handle *xs_open(unsigned long flags) + { + struct xs_handle *xsh = NULL; + ++ if (!(flags & XS_OPEN_DOMAINONLY)) { + if (flags & XS_OPEN_READONLY) + xsh = get_handle(xs_daemon_socket_ro()); + else + xsh = get_handle(xs_daemon_socket()); ++ } + + if (!xsh && !(flags & XS_OPEN_SOCKETONLY)) + xsh = get_handle(xs_domain_dev()); diff --git a/pycompat b/pycompat new file mode 100644 index 0000000000..0cfbf08886 --- /dev/null +++ b/pycompat @@ -0,0 +1 @@ +2 diff --git a/rules b/rules new file mode 100755 index 0000000000..a74bc9f77f --- /dev/null +++ b/rules @@ -0,0 +1,90 @@ +#!/usr/bin/make -f + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +include /usr/share/dpkg/default.mk + +SHELL := sh -e +SOURCE := $(shell dpkg-parsechangelog -SSource) +VERSION := $(shell dpkg-parsechangelog -SVersion) +VERSION_UPSTREAM := $(shell echo "$(VERSION)" | sed -e 's,-[^-]*$$,,') +VERSION_BINNMU := $(shell echo "$(VERSION)" | sed -rne 's,.*\+b([0-9]+)$$,\1,p') + +include debian/rules.defs + +setup: debian/control + dh_testdir + $(MAKE) -f debian/rules.gen setup_$(DEB_HOST_ARCH) + +build: build-arch build-indep + +build-arch: setup + dh_testdir + $(MAKE) -f debian/rules.gen build-arch_$(DEB_HOST_ARCH) + +build-indep: setup + dh_testdir + $(MAKE) -f debian/rules.gen build-indep + +maintainerclean: + rm -f debian/control* debian/rules.gen debian/xen-hypervisor-* debian/xen-utils-[0-9]* + +clean: debian/control + dh_testdir + rm -rf $(BUILD_DIR) $(STAMPS_DIR) debian/lib/python/debian_xen/__pycache__ + rm -rf $(BUILD_DIR) $(STAMPS_DIR) debian/lib/python/debian_linux/__pycache__ + dh_clean + +binary-indep: + dh_testdir + $(MAKE) -f debian/rules.gen binary-indep + +binary-arch: + dh_testdir + $(MAKE) -f debian/rules.gen binary-arch_$(DEB_HOST_ARCH) + +binary: binary-indep binary-arch + +DIR_ORIG = ../orig/$(SOURCE)-$(VERSION_UPSTREAM) +TAR_ORIG_NAME = $(SOURCE)_$(VERSION_UPSTREAM).orig.tar.xz +TAR_ORIG = $(firstword $(wildcard ../$(TAR_ORIG_NAME)) $(wildcard ../orig/$(TAR_ORIG_NAME))) + +orig: $(DIR_ORIG) + rsync --delete --exclude /debian --exclude .git -a $(DIR_ORIG)/ . + QUILT_PATCHES='$(CURDIR)/debian/patches' QUILT_PC=.pc quilt push --quiltrc - -a -q --fuzz=0 + +$(DIR_ORIG): +ifeq ($(TAR_ORIG),) + $(error Cannot find orig tarball $(TAR_ORIG_NAME)) +else + mkdir -p ../orig + tar -C ../orig -xaf $(TAR_ORIG) +endif + +CONTROL_FILES += debian/changelog debian/bin/gencontrol.py $(wildcard debian/templates/*.in) +CONTROL_FILES += $(wildcard debian/arch/defines) $(wildcard debian/arch/*/defines) +GENCONTROL = $(__MODULES_DIR)gencontrol.py +debian/control debian/rules.gen: $(CONTROL_FILES) +ifeq ($(wildcard debian/control.md5sum),) + $(MAKE) -f debian/rules debian/control-real +else ifeq ($(VERSION_BINNMU),) + md5sum --check debian/control.md5sum --status || \ + $(MAKE) -f debian/rules debian/control-real +else + grep -v debian/changelog debian/control.md5sum | md5sum --check - --status || \ + $(MAKE) -f debian/rules debian/control-real +endif + +debian/control-real: $(CONTROL_FILES) + debian/bin/gencontrol.py + md5sum $^ > debian/control.md5sum + @echo + @echo This target is made to fail intentionally, to make sure + @echo that it is NEVER run during the automated build. Please + @echo ignore the following error, the debian/control file has + @echo been generated SUCCESSFULLY. + @echo + exit 1 + +.PHONY: clean build binary-indep binary-arch binary diff --git a/rules.defs b/rules.defs new file mode 100644 index 0000000000..f070af0bda --- /dev/null +++ b/rules.defs @@ -0,0 +1,3 @@ +BUILD_DIR = debian/build +STAMPS_DIR = debian/stamps +TEMPLATES_DIR = debian/templates diff --git a/rules.gen b/rules.gen new file mode 100644 index 0000000000..65c6c7b1d9 --- /dev/null +++ b/rules.gen @@ -0,0 +1,128 @@ +.NOTPARALLEL: +binary-arch: binary-arch_amd64 binary-arch_arm64 binary-arch_armhf binary-arch_i386 +binary-arch_amd64: binary-arch_amd64_none binary-arch_amd64_real +binary-arch_amd64_none: binary-arch_amd64_none_amd64 binary-arch_amd64_none_real +binary-arch_amd64_none_amd64:: binary-arch_amd64_none_amd64_real +binary-arch_amd64_none_amd64:: + $(MAKE) -f debian/rules.real binary-arch-flavour ARCH='amd64' FEATURESET='none' FLAVOUR='amd64' IMAGE_SUFFIX='.gz' VERSION='4.11' XEN_ARCH='x86_64' + $(MAKE) -f debian/rules.real install-dummy DH_OPTIONS='-pxen-system-amd64' ARCH='amd64' FEATURESET='none' FLAVOUR='amd64' IMAGE_SUFFIX='.gz' VERSION='4.11' XEN_ARCH='x86_64' +binary-arch_amd64_none_amd64_real: +binary-arch_amd64_none_real: +binary-arch_amd64_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ARCH='amd64' VERSION='4.11' XEN_ARCH='x86_64' +binary-arch_arm64: binary-arch_arm64_none binary-arch_arm64_real +binary-arch_arm64_none: binary-arch_arm64_none_arm64 binary-arch_arm64_none_real +binary-arch_arm64_none_arm64:: binary-arch_arm64_none_arm64_real +binary-arch_arm64_none_arm64:: + $(MAKE) -f debian/rules.real binary-arch-flavour ARCH='arm64' FEATURESET='none' FLAVOUR='arm64' IMAGE_SUFFIX='' VERSION='4.11' XEN_ARCH='arm64' + $(MAKE) -f debian/rules.real install-dummy DH_OPTIONS='-pxen-system-arm64' ARCH='arm64' FEATURESET='none' FLAVOUR='arm64' IMAGE_SUFFIX='' VERSION='4.11' XEN_ARCH='arm64' +binary-arch_arm64_none_arm64_real: +binary-arch_arm64_none_real: +binary-arch_arm64_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ARCH='arm64' VERSION='4.11' XEN_ARCH='arm64' +binary-arch_armhf: binary-arch_armhf_none binary-arch_armhf_real +binary-arch_armhf_none: binary-arch_armhf_none_armhf binary-arch_armhf_none_real +binary-arch_armhf_none_armhf:: binary-arch_armhf_none_armhf_real +binary-arch_armhf_none_armhf:: + $(MAKE) -f debian/rules.real binary-arch-flavour ARCH='armhf' FEATURESET='none' FLAVOUR='armhf' IMAGE_SUFFIX='' VERSION='4.11' XEN_ARCH='arm32' + $(MAKE) -f debian/rules.real install-dummy DH_OPTIONS='-pxen-system-armhf' ARCH='armhf' FEATURESET='none' FLAVOUR='armhf' IMAGE_SUFFIX='' VERSION='4.11' XEN_ARCH='arm32' +binary-arch_armhf_none_armhf_real: +binary-arch_armhf_none_real: +binary-arch_armhf_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ARCH='armhf' VERSION='4.11' XEN_ARCH='arm32' +binary-arch_i386: binary-arch_i386_none binary-arch_i386_real +binary-arch_i386_none: binary-arch_i386_none_amd64 binary-arch_i386_none_real +binary-arch_i386_none_amd64:: binary-arch_i386_none_amd64_real +binary-arch_i386_none_amd64:: + $(MAKE) -f debian/rules.real binary-arch-flavour ARCH='i386' FEATURESET='none' FLAVOUR='amd64' VERSION='4.11' XEN_ARCH='x86_64' + $(MAKE) -f debian/rules.real install-dummy DH_OPTIONS='-pxen-system-amd64' ARCH='i386' FEATURESET='none' FLAVOUR='amd64' VERSION='4.11' XEN_ARCH='x86_64' +binary-arch_i386_none_amd64_real: +binary-arch_i386_none_real: +binary-arch_i386_real:: + $(MAKE) -f debian/rules.real binary-arch-arch ARCH='i386' VERSION='4.11' XEN_ARCH='x86_32' +binary-indep:: binary-indep_none +binary-indep:: + $(MAKE) -f debian/rules.real binary-indep VERSION='4.11' +binary-indep_none: binary-indep_none_real +binary-indep_none_real: +build-arch: build-arch_amd64 build-arch_arm64 build-arch_armhf build-arch_i386 +build-arch_amd64: build-arch_amd64_none build-arch_amd64_real +build-arch_amd64_none: build-arch_amd64_none_amd64 build-arch_amd64_none_real +build-arch_amd64_none_amd64:: build-arch_amd64_none_amd64_real +build-arch_amd64_none_amd64:: + $(MAKE) -f debian/rules.real build-arch-flavour ARCH='amd64' FEATURESET='none' FLAVOUR='amd64' IMAGE_SUFFIX='.gz' VERSION='4.11' XEN_ARCH='x86_64' +build-arch_amd64_none_amd64_real: +build-arch_amd64_none_real: +build-arch_amd64_real:: + $(MAKE) -f debian/rules.real build-arch-arch ARCH='amd64' VERSION='4.11' XEN_ARCH='x86_64' +build-arch_arm64: build-arch_arm64_none build-arch_arm64_real +build-arch_arm64_none: build-arch_arm64_none_arm64 build-arch_arm64_none_real +build-arch_arm64_none_arm64:: build-arch_arm64_none_arm64_real +build-arch_arm64_none_arm64:: + $(MAKE) -f debian/rules.real build-arch-flavour ARCH='arm64' FEATURESET='none' FLAVOUR='arm64' IMAGE_SUFFIX='' VERSION='4.11' XEN_ARCH='arm64' +build-arch_arm64_none_arm64_real: +build-arch_arm64_none_real: +build-arch_arm64_real:: + $(MAKE) -f debian/rules.real build-arch-arch ARCH='arm64' VERSION='4.11' XEN_ARCH='arm64' +build-arch_armhf: build-arch_armhf_none build-arch_armhf_real +build-arch_armhf_none: build-arch_armhf_none_armhf build-arch_armhf_none_real +build-arch_armhf_none_armhf:: build-arch_armhf_none_armhf_real +build-arch_armhf_none_armhf:: + $(MAKE) -f debian/rules.real build-arch-flavour ARCH='armhf' FEATURESET='none' FLAVOUR='armhf' IMAGE_SUFFIX='' VERSION='4.11' XEN_ARCH='arm32' +build-arch_armhf_none_armhf_real: +build-arch_armhf_none_real: +build-arch_armhf_real:: + $(MAKE) -f debian/rules.real build-arch-arch ARCH='armhf' VERSION='4.11' XEN_ARCH='arm32' +build-arch_i386: build-arch_i386_none build-arch_i386_real +build-arch_i386_none: build-arch_i386_none_amd64 build-arch_i386_none_real +build-arch_i386_none_amd64:: build-arch_i386_none_amd64_real +build-arch_i386_none_amd64:: + $(MAKE) -f debian/rules.real build-arch-flavour ARCH='i386' FEATURESET='none' FLAVOUR='amd64' VERSION='4.11' XEN_ARCH='x86_64' +build-arch_i386_none_amd64_real: +build-arch_i386_none_real: +build-arch_i386_real:: + $(MAKE) -f debian/rules.real build-arch-arch ARCH='i386' VERSION='4.11' XEN_ARCH='x86_32' +build-indep:: build-indep_none +build-indep:: + $(MAKE) -f debian/rules.real build-indep VERSION='4.11' +build-indep_none: build-indep_none_real +build-indep_none_real: +setup: setup_amd64 setup_arm64 setup_armhf setup_i386 setup_none +setup_amd64: setup_amd64_none setup_amd64_real +setup_amd64_none: setup_amd64_none_amd64 setup_amd64_none_real +setup_amd64_none_amd64:: setup_amd64_none_amd64_real +setup_amd64_none_amd64:: + $(MAKE) -f debian/rules.real setup-flavour ARCH='amd64' FEATURESET='none' FLAVOUR='amd64' IMAGE_SUFFIX='.gz' VERSION='4.11' XEN_ARCH='x86_64' +setup_amd64_none_amd64_real: +setup_amd64_none_real: +setup_amd64_real:: + $(MAKE) -f debian/rules.real setup-arch ARCH='amd64' VERSION='4.11' XEN_ARCH='x86_64' +setup_arm64: setup_arm64_none setup_arm64_real +setup_arm64_none: setup_arm64_none_arm64 setup_arm64_none_real +setup_arm64_none_arm64:: setup_arm64_none_arm64_real +setup_arm64_none_arm64:: + $(MAKE) -f debian/rules.real setup-flavour ARCH='arm64' FEATURESET='none' FLAVOUR='arm64' IMAGE_SUFFIX='' VERSION='4.11' XEN_ARCH='arm64' +setup_arm64_none_arm64_real: +setup_arm64_none_real: +setup_arm64_real:: + $(MAKE) -f debian/rules.real setup-arch ARCH='arm64' VERSION='4.11' XEN_ARCH='arm64' +setup_armhf: setup_armhf_none setup_armhf_real +setup_armhf_none: setup_armhf_none_armhf setup_armhf_none_real +setup_armhf_none_armhf:: setup_armhf_none_armhf_real +setup_armhf_none_armhf:: + $(MAKE) -f debian/rules.real setup-flavour ARCH='armhf' FEATURESET='none' FLAVOUR='armhf' IMAGE_SUFFIX='' VERSION='4.11' XEN_ARCH='arm32' +setup_armhf_none_armhf_real: +setup_armhf_none_real: +setup_armhf_real:: + $(MAKE) -f debian/rules.real setup-arch ARCH='armhf' VERSION='4.11' XEN_ARCH='arm32' +setup_i386: setup_i386_none setup_i386_real +setup_i386_none: setup_i386_none_amd64 setup_i386_none_real +setup_i386_none_amd64:: setup_i386_none_amd64_real +setup_i386_none_amd64:: + $(MAKE) -f debian/rules.real setup-flavour ARCH='i386' FEATURESET='none' FLAVOUR='amd64' VERSION='4.11' XEN_ARCH='x86_64' +setup_i386_none_amd64_real: +setup_i386_none_real: +setup_i386_real:: + $(MAKE) -f debian/rules.real setup-arch ARCH='i386' VERSION='4.11' XEN_ARCH='x86_32' +setup_none: setup_none_real +setup_none_real: diff --git a/rules.real b/rules.real new file mode 100644 index 0000000000..95ecff6cbe --- /dev/null +++ b/rules.real @@ -0,0 +1,286 @@ +include /usr/share/dpkg/default.mk + +export DH_OPTIONS + +setup_env := env -u ARCH -u FLAVOUR -u VERSION -u MAKEFLAGS + +MAKE_CLEAN = $(setup_env) $(MAKE) V=1 +MAKE_SELF = $(MAKE) -f debian/rules.real + +include debian/rules.defs + +stamp = [ -d $(dir $@) ] || mkdir $(dir $@); touch $@ + +binary-arch-arch: install-libxen_$(ARCH) +binary-arch-arch: install-libxen-dev_$(ARCH) +binary-arch-arch: install-libxenstore_$(ARCH) +binary-arch-arch: install-utils_$(ARCH) +binary-arch-arch: install-xenstore-utils_$(ARCH) +binary-arch-flavour: install-hypervisor_$(ARCH)_$(FLAVOUR) + +binary-indep: install-utils-common install-hypervisor-common + +build-arch-arch: $(STAMPS_DIR)/build-utils_$(ARCH) +build-arch-flavour: $(STAMPS_DIR)/build-hypervisor_$(ARCH)_$(FLAVOUR) + +build-indep: $(STAMPS_DIR)/build-docs + +setup-arch: $(STAMPS_DIR)/setup-utils_$(ARCH) +setup-flavour: $(STAMPS_DIR)/setup-hypervisor_$(ARCH)_$(FLAVOUR) + +$(STAMPS_DIR)/setup-docs: SOURCE_FILES = $(filter-out debian, $(wildcard *)) +$(STAMPS_DIR)/setup-docs: DIR=$(BUILD_DIR)/build-docs +$(STAMPS_DIR)/setup-docs: + @rm -rf $(DIR) + mkdir -p $(DIR) + cp -al $(SOURCE_FILES) $(DIR) + cp --remove-destination /usr/share/misc/config.guess /usr/share/misc/config.sub $(DIR) + cd $(DIR); \ + WGET=/bin/false \ + ./configure --disable-stubdom --disable-xen --prefix=/usr + @$(stamp) + +$(STAMPS_DIR)/setup-hypervisor_$(ARCH)_$(FLAVOUR): SOURCE_FILES = $(filter-out debian, $(wildcard *)) +$(STAMPS_DIR)/setup-hypervisor_$(ARCH)_$(FLAVOUR): DIR=$(BUILD_DIR)/build-hypervisor_$(ARCH)_$(FLAVOUR) +$(STAMPS_DIR)/setup-hypervisor_$(ARCH)_$(FLAVOUR): + @rm -rf $(DIR) + mkdir -p $(DIR) + cp -al $(SOURCE_FILES) $(DIR) + echo "XEN_VENDORVERSION := $(EXTRAVERSION)" > $(DIR)/xen/xen-version + @$(stamp) + +$(STAMPS_DIR)/setup-utils_$(ARCH): SOURCE_FILES = $(filter-out debian, $(wildcard *)) +$(STAMPS_DIR)/setup-utils_$(ARCH): DIR=$(BUILD_DIR)/build-utils_$(ARCH) +$(STAMPS_DIR)/setup-utils_$(ARCH): + @rm -rf $(DIR) + mkdir -p $(DIR) + cp -al $(SOURCE_FILES) $(DIR) + cp --remove-destination /usr/share/misc/config.guess /usr/share/misc/config.sub $(DIR) + cd $(DIR); \ + WGET=/bin/false \ + ./configure \ + --disable-docs --disable-stubdom --disable-xen \ + --prefix=/usr \ + --includedir=/usr/include \ + --libdir=/usr/lib/$(DEB_HOST_MULTIARCH) \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --with-libexec-leaf-dir=xen-$(VERSION) \ + --disable-blktap1 \ + --disable-blktap2 \ + --disable-ocamltools \ + --disable-qemu-traditional --disable-rombios \ + --with-system-qemu=/usr/bin/qemu-system-i386 \ + --enable-ovmf --with-system-ovmf=/usr/share/ovmf/OVMF.fd \ + --with-system-seabios=/usr/share/seabios/bios-256k.bin + @$(stamp) + +$(STAMPS_DIR)/build-docs: DIR=$(BUILD_DIR)/build-docs +$(STAMPS_DIR)/build-docs: $(STAMPS_DIR)/setup-docs + +$(MAKE_CLEAN) -C $(DIR)/docs + touch $@ + +# Adding LANG=C.UTF-8 to the build environment to work around a bug in grep +# which causes it to switch into binary mode in the middle of a file. +# (see http://bugs.launchpad.net/bugs/1547466) + +$(STAMPS_DIR)/build-hypervisor_$(ARCH)_$(FLAVOUR): DIR=$(BUILD_DIR)/build-hypervisor_$(ARCH)_$(FLAVOUR) +$(STAMPS_DIR)/build-hypervisor_$(ARCH)_$(FLAVOUR): $(STAMPS_DIR)/setup-hypervisor_$(ARCH)_$(FLAVOUR) + +$(MAKE_CLEAN) -C $(DIR)/xen \ + XEN_COMPILE_ARCH=$(XEN_ARCH) \ + XEN_TARGET_ARCH=$(XEN_ARCH) \ + LANG=C.UTF-8 + touch $@ + +$(STAMPS_DIR)/build-utils_$(ARCH) \ +$(STAMPS_DIR)/install-utils_$(ARCH): CONFIG = \ + debug=n \ + XEN_COMPILE_ARCH=$(XEN_ARCH) \ + XEN_TARGET_ARCH=$(XEN_ARCH) \ + EXTRA_CFLAGS_XEN_TOOLS="$(CFLAGS)" \ + APPEND_CPPFLAGS="$(CPPFLAGS)" \ + APPEND_LDFLAGS="$(LDFLAGS)" \ + OCAMLDESTDIR=$(CURDIR)/$(BUILD_DIR)/install-utils_$(ARCH)/$(OCAML_STDLIB_DIR) \ + PYTHON=$(shell pyversions -r) \ + LANG=C.UTF-8 + +$(STAMPS_DIR)/build-utils_$(ARCH): DIR=$(BUILD_DIR)/build-utils_$(ARCH) +$(STAMPS_DIR)/build-utils_$(ARCH): $(STAMPS_DIR)/setup-utils_$(ARCH) + +$(MAKE_CLEAN) -C $(DIR) $(CONFIG) build-tools-public-headers + +$(MAKE_CLEAN) -C $(DIR)/tools $(CONFIG) + touch $@ + +$(STAMPS_DIR)/install-utils_$(ARCH): DIR = $(BUILD_DIR)/build-utils_$(ARCH) +$(STAMPS_DIR)/install-utils_$(ARCH): INSTALL_DIR = $(BUILD_DIR)/install-utils_$(ARCH) +$(STAMPS_DIR)/install-utils_$(ARCH): $(STAMPS_DIR)/build-utils_$(ARCH) + @rm -rf $(INSTALL_DIR) + mkdir -p $(INSTALL_DIR)/$(OCAML_DLL_DIR) + +$(MAKE_CLEAN) -C $(DIR) install-tools-public-headers \ + DESTDIR=$(CURDIR)/$(INSTALL_DIR) $(CONFIG) + +$(MAKE_CLEAN) -C $(DIR)/tools install DESTDIR=$(CURDIR)/$(INSTALL_DIR) $(CONFIG) +ifneq ($(filter i386 amd64,$(ARCH)),) + # hvmloader + strip --remove-section=.comment --remove-section=.note $(INSTALL_DIR)/usr/lib/xen*/boot/* +endif + touch $@ + +$(STAMPS_DIR)/install-utils-common: DIR = $(BUILD_DIR)/build-docs +$(STAMPS_DIR)/install-utils-common: INSTALL_DIR = $(BUILD_DIR)/install-utils-common +$(STAMPS_DIR)/install-utils-common: export DESTDIR = $(CURDIR)/$(INSTALL_DIR) +$(STAMPS_DIR)/install-utils-common: $(STAMPS_DIR)/build-docs + @rm -rf $(INSTALL_DIR) + +$(MAKE_CLEAN) -C $(SOURCE_DIR)/tools/examples install-configs + +$(MAKE_CLEAN) -C $(SOURCE_DIR)/tools/hotplug/common install-scripts + +$(MAKE_CLEAN) -C $(SOURCE_DIR)/tools/hotplug/Linux install-scripts + +$(MAKE_CLEAN) -C debian/scripts install + touch $@ + +$(STAMPS_DIR)/install-hypervisor-common: INSTALL_DIR = $(BUILD_DIR)/install-hypervisor-common +$(STAMPS_DIR)/install-hypervisor-common: $(STAMPS_DIR)/build-docs + @rm -rf $(INSTALL_DIR) + mkdir -p $(INSTALL_DIR) + + +install-base: + dh_installchangelogs -XChangelog + dh_installdirs + dh_installdocs + dh_installexamples + dh_compress + dh_fixperms + dh_installdeb + dh_gencontrol -- $(GENCONTROL_ARGS) + dh_md5sums + dh_builddeb + +install-dummy: + dh_testdir + dh_testroot + dh_prep + +$(MAKE_SELF) install-base + +install-hypervisor_$(ARCH)_$(FLAVOUR): DIR=$(BUILD_DIR)/build-hypervisor_$(ARCH)_$(FLAVOUR) +install-hypervisor_$(ARCH)_$(FLAVOUR): PACKAGE_NAME = xen-hypervisor-$(VERSION)-$(FLAVOUR) +install-hypervisor_$(ARCH)_$(FLAVOUR): DH_OPTIONS = -p$(PACKAGE_NAME) +install-hypervisor_$(ARCH)_$(FLAVOUR): $(STAMPS_DIR)/build-hypervisor_$(ARCH)_$(FLAVOUR) + dh_testdir + dh_testroot + dh_prep + dh_installdirs boot + dh_install debian/templates/xen-hypervisor.bug/* usr/share/bug/$(PACKAGE_NAME) + cp $(DIR)/xen/xen$(IMAGE_SUFFIX) debian/$(PACKAGE_NAME)/boot/xen-$(VERSION)-$(FLAVOUR)$(IMAGE_SUFFIX) +ifeq ($(ARCH),amd64) + cp $(DIR)/xen/xen.efi debian/$(PACKAGE_NAME)/boot/xen-$(VERSION)-$(FLAVOUR).efi +endif + +$(MAKE_SELF) install-base + +install-libxen_$(ARCH): DIR = $(BUILD_DIR)/install-utils_$(ARCH) +install-libxen_$(ARCH): PACKAGE_NAME = libxen-$(VERSION) +install-libxen_$(ARCH): DH_OPTIONS = -p$(PACKAGE_NAME) +install-libxen_$(ARCH): $(STAMPS_DIR)/install-utils_$(ARCH) install-libxenstore_$(ARCH) + dh_testdir + dh_testroot + dh_prep + dh_install -Xtoolcore --sourcedir=$(DIR) usr/lib/*/lib*-$(VERSION).so* + dh_install debian/templates/libxen.bug/* usr/share/bug/$(PACKAGE_NAME) + dh_strip + dh_makeshlibs -V + dh_shlibdeps + +$(MAKE_SELF) install-base + +install-libxen-dev_$(ARCH): DIR = $(BUILD_DIR)/install-utils_$(ARCH) +install-libxen-dev_$(ARCH): PACKAGE_NAME = libxen-dev +install-libxen-dev_$(ARCH): DH_OPTIONS = -p$(PACKAGE_NAME) +install-libxen-dev_$(ARCH): $(STAMPS_DIR)/install-utils_$(ARCH) + dh_testdir + dh_testroot + dh_prep + # Move pkgconfig into a multiarch compliant place + mv $(DIR)/usr/share/pkgconfig $(DIR)/usr/lib/$(DEB_HOST_MULTIARCH)/ + dh_install --sourcedir=$(DIR) + dh_strip + dh_shlibdeps + +$(MAKE_SELF) install-base + +install-libxenstore_$(ARCH): DIR = $(BUILD_DIR)/install-utils_$(ARCH) +install-libxenstore_$(ARCH): PACKAGE_NAME = libxenstore3.0 +install-libxenstore_$(ARCH): DH_OPTIONS = -p$(PACKAGE_NAME) +install-libxenstore_$(ARCH): $(STAMPS_DIR)/install-utils_$(ARCH) + dh_testdir + dh_testroot + dh_prep + dh_install --sourcedir=$(DIR) + dh_strip + dh_makeshlibs -V + dh_shlibdeps + +$(MAKE_SELF) install-base + +install-utils_$(ARCH): SOURCE_DIR = $(BUILD_DIR)/build-utils_$(ARCH) +install-utils_$(ARCH): DIR = $(BUILD_DIR)/install-utils_$(ARCH) +install-utils_$(ARCH): PACKAGE_NAME = xen-utils-$(VERSION) +install-utils_$(ARCH): PACKAGE_DIR = debian/$(PACKAGE_NAME) +install-utils_$(ARCH): DH_OPTIONS = -p$(PACKAGE_NAME) +install-utils_$(ARCH): $(STAMPS_DIR)/install-utils_$(ARCH) install-libxen_$(ARCH) + dh_testdir + dh_testroot + dh_prep + install -D -m644 debian/xen-utils.NEWS $(PACKAGE_DIR)/usr/share/doc/$(PACKAGE_NAME)/NEWS + install -D -m644 debian/xen-utils.README.Debian $(PACKAGE_DIR)/usr/share/doc/$(PACKAGE_NAME)/README.Debian + cp $(DIR)/usr/sbin/* $(DIR)/usr/lib/xen-$(VERSION)/bin/ + dh_install --sourcedir=$(DIR) usr/lib/xen-$(VERSION) + dh_install debian/templates/xen-utils.bug/* usr/share/bug/$(PACKAGE_NAME) + dh_lintian + ( echo -n "misc:Built-Using="; dpkg-query -f='$${source:Package} (= $${source:Version}), ' -W ipxe-qemu seabios; echo ) >> debian/$(PACKAGE_NAME).substvars + dh_python2 -V$(shell pyversions -rv) /usr/lib/xen-$(VERSION) + dh_strip + dh_makeshlibs -V + dh_shlibdeps + +$(MAKE_SELF) install-base + +install-utils-common: SOURCE_DIR = $(BUILD_DIR)/build-docs +install-utils-common: DIR = $(BUILD_DIR)/install-utils-common +install-utils-common: PACKAGE_NAME = xen-utils-common +install-utils-common: DH_OPTIONS = -p$(PACKAGE_NAME) +install-utils-common: $(STAMPS_DIR)/install-utils-common + dh_testdir + dh_testroot + dh_prep + dh_install -X .svn --sourcedir=$(DIR) + dh_installinit --name xen -- defaults 20 21 + dh_installinit --name xend + dh_installinit --name xendomains --no-start -- defaults 21 20 + dh_installman \ + $(SOURCE_DIR)/docs/man1/* \ + $(SOURCE_DIR)/docs/man5/* \ + $(SOURCE_DIR)/docs/man8/* + dh_installdocs $(SOURCE_DIR)/docs/txt/misc + dh_link + dh_ucf + +$(MAKE_SELF) install-base + +install-hypervisor-common: DIR = $(BUILD_DIR)/install-hypervisor-common +install-hypervisor-common: PACKAGE_NAME = xen-hypervisor-common +install-hypervisor-common: DH_OPTIONS = -p$(PACKAGE_NAME) +install-hypervisor-common: $(STAMPS_DIR)/install-hypervisor-common + dh_testdir + dh_testroot + dh_prep + dh_install --sourcedir=$(DIR) + dh_ucf + +$(MAKE_SELF) install-base + +install-xenstore-utils_$(ARCH): DIR = $(BUILD_DIR)/install-utils_$(ARCH) +install-xenstore-utils_$(ARCH): PACKAGE_NAME = xenstore-utils +install-xenstore-utils_$(ARCH): DH_OPTIONS = -p$(PACKAGE_NAME) +install-xenstore-utils_$(ARCH): $(STAMPS_DIR)/install-utils_$(ARCH) install-libxenstore_$(ARCH) + dh_testdir + dh_testroot + dh_prep + dh_install --sourcedir=$(DIR) + dh_strip + dh_shlibdeps + +$(MAKE_SELF) install-base + +# vim: filetype=make diff --git a/scripts/Makefile b/scripts/Makefile new file mode 100644 index 0000000000..22d9a8241e --- /dev/null +++ b/scripts/Makefile @@ -0,0 +1,52 @@ +ETC_SCRIPTS = \ + qemu-ifup + +GLOBAL_SCRIPTS = \ + xen + +GLOBAL_TOOLSTACK_LINKS = \ + xl \ + xm + +GLOBAL_TOOLSTACK_WRAPPER = xen-toolstack-wrapper + +GLOBAL_UTILS_LINKS = \ + xenperf \ + xenpm \ + xentop \ + xentrace \ + xentrace_format \ + xentrace_setmask \ + xentrace_setsize + +GLOBAL_UTILS_WRAPPER = xen-utils-wrapper + +PRIVATE_SCRIPTS = \ + xen-dir \ + xen-init-list \ + xen-init-name \ + xen-toolstack \ + xen-version \ + $(GLOBAL_TOOLSTACK_WRAPPER) \ + $(GLOBAL_UTILS_WRAPPER) + +ETC_SCRIPTS_DIR = /etc/xen/scripts +GLOBAL_SCRIPTS_DIR = /usr/sbin +PRIVATE_SCRIPTS_DIR = /usr/lib/xen-common/bin + +install: + install -d $(DESTDIR)$(ETC_SCRIPTS_DIR) + install $(ETC_SCRIPTS) $(DESTDIR)$(ETC_SCRIPTS_DIR) + install -d $(DESTDIR)$(GLOBAL_SCRIPTS_DIR) + install $(GLOBAL_SCRIPTS) $(DESTDIR)$(GLOBAL_SCRIPTS_DIR) + @for i in $(GLOBAL_TOOLSTACK_LINKS); do \ + echo ln -s $(PRIVATE_SCRIPTS_DIR)/$(GLOBAL_TOOLSTACK_WRAPPER) $(DESTDIR)$(GLOBAL_SCRIPTS_DIR)/$$i; \ + ln -s $(PRIVATE_SCRIPTS_DIR)/$(GLOBAL_TOOLSTACK_WRAPPER) $(DESTDIR)$(GLOBAL_SCRIPTS_DIR)/$$i || exit 1; \ + done + @for i in $(GLOBAL_UTILS_LINKS); do \ + echo ln -s $(PRIVATE_SCRIPTS_DIR)/$(GLOBAL_UTILS_WRAPPER) $(DESTDIR)$(GLOBAL_SCRIPTS_DIR)/$$i; \ + ln -s $(PRIVATE_SCRIPTS_DIR)/$(GLOBAL_UTILS_WRAPPER) $(DESTDIR)$(GLOBAL_SCRIPTS_DIR)/$$i || exit 1; \ + done + install -d $(DESTDIR)$(PRIVATE_SCRIPTS_DIR) + install $(PRIVATE_SCRIPTS) $(DESTDIR)$(PRIVATE_SCRIPTS_DIR) + diff --git a/scripts/qemu-ifup b/scripts/qemu-ifup new file mode 100644 index 0000000000..eb1febe652 --- /dev/null +++ b/scripts/qemu-ifup @@ -0,0 +1,13 @@ +#!/bin/sh + +echo -c 'config qemu network with xen bridge for ' +echo $* + +# Initialise a dummy MAC address. We choose the numerically +# largest non-broadcast address to prevent the address getting +# stolen by an Ethernet bridge for STP purposes. +# (FE:FF:FF:FF:FF:FF) +ip link set $1 address fe:ff:ff:ff:ff:ff || true + +ip link set up dev $1 +brctl addif $2 $1 diff --git a/scripts/xen b/scripts/xen new file mode 100755 index 0000000000..a221e172d5 --- /dev/null +++ b/scripts/xen @@ -0,0 +1,6 @@ +#!/bin/sh -e + +COMMAND="$(basename $0)" +TOOLSTACK=$(. /usr/lib/xen-common/bin/xen-toolstack); RET=$?; [ $RET -eq 0 ] || exit $RET + +exec "$TOOLSTACK" "$@" diff --git a/scripts/xen-dir b/scripts/xen-dir new file mode 100755 index 0000000000..32b5776cf3 --- /dev/null +++ b/scripts/xen-dir @@ -0,0 +1,10 @@ +#!/bin/sh -e + +VERSION=$(. /usr/lib/xen-common/bin/xen-version); RET=$?; [ $RET -eq 0 ] || exit $RET + +if [ -d "/usr/lib/xen-$VERSION" ]; then + echo "/usr/lib/xen-$VERSION" +else + echo "ERROR: Can't find version $VERSION of xen utils, bailing out!" >&2 + exit 127 +fi diff --git a/scripts/xen-init-list b/scripts/xen-init-list new file mode 100755 index 0000000000..99646ce1e5 --- /dev/null +++ b/scripts/xen-init-list @@ -0,0 +1,73 @@ +#!/usr/bin/python + +import json +import re +import sys +import subprocess + + +class SXPParser(object): + tokenizer_rules = r""" (?P \( ) | (?P \) ) | (?P \s+ ) | [^()^\s]+ """ + tokenizer_re = re.compile(tokenizer_rules, re.X) + + @classmethod + def loads(cls, input): + data = [] + stack = [] + for match in cls.tokenizer_re.finditer(input): + if match.group('open'): + stack.append([]) + elif match.group('close'): + top = stack.pop() + if stack: + stack[-1].append(top) + else: + data.append(top) + elif match.group('whitespace'): + pass + else: + if stack: + stack[-1].append(match.group()) + return data + + +class Data(object): + def __call__(self, out): + for domid, info in sorted(self.data.iteritems(), reverse=True): + if domid == 0: + continue + out.write('{!s} {}\n'.format(domid, *info)) + + +class DataJSON(Data): + def __init__(self, p): + s = json.loads(p) + self.data = d = {} + for i in s: + domid = i['domid'] + name = i['config']['c_info']['name'] + d[domid] = (name, ) + + +class DataSXP(Data): + def __init__(self, p): + s = SXPParser.loads(p) + self.data = d = {} + for i in s: + if i and i[0] == 'domain': + try: + data = dict(j for j in i if len(j) == 2) + domid = int(data['domid']) + name = data['name'] + d[domid] = (name, ) + except (KeyError, ValueError) as e: + pass + + +if __name__ == '__main__': + p = subprocess.check_output(('xen', 'list', '-l')) + if p[0] == '(': + d = DataSXP(p) + else: + d = DataJSON(p) + d(sys.stdout) diff --git a/scripts/xen-init-name b/scripts/xen-init-name new file mode 100755 index 0000000000..21aad6fd48 --- /dev/null +++ b/scripts/xen-init-name @@ -0,0 +1,61 @@ +#!/usr/bin/python + +import json +import re +import sys +import subprocess + + +class SXPParser(object): + tokenizer_rules = r""" (?P \( ) | (?P \) ) | (?P \s+ ) | [^()^\s]+ """ + tokenizer_re = re.compile(tokenizer_rules, re.X) + + @classmethod + def loads(cls, input): + data = [] + stack = [] + for match in cls.tokenizer_re.finditer(input): + if match.group('open'): + stack.append([]) + elif match.group('close'): + top = stack.pop() + if stack: + stack[-1].append(top) + else: + data.append(top) + elif match.group('whitespace'): + pass + else: + if stack: + stack[-1].append(match.group()) + return data + + +class Data(object): + def __call__(self, out): + out.write('{}\n'.format(self.name)) + + +class DataJSON(Data): + def __init__(self, p): + s = json.loads(p) + self.name = s['c_info']['name'] + + +class DataSXP(Data): + def __init__(self, p): + s = SXPParser.loads(p) + for i in s: + if i and i[0] == 'domain': + data = dict(j for j in i if len(j) == 2) + self.name = data['name'] + break + + +if __name__ == '__main__': + p = subprocess.check_output(('xen', 'create', '--quiet', '--dryrun', '--defconfig', sys.argv[1])) + if p[0] == '(': + d = DataSXP(p) + else: + d = DataJSON(p) + d(sys.stdout) diff --git a/scripts/xen-toolstack b/scripts/xen-toolstack new file mode 100755 index 0000000000..3a36fd05d6 --- /dev/null +++ b/scripts/xen-toolstack @@ -0,0 +1,42 @@ +#!/bin/sh -e + +configfile=/etc/default/xen + +dir=$(. /usr/lib/xen-common/bin/xen-dir); ret=$?; [ $ret -eq 0 ] || exit $ret + +check() { + local PATH + if [ "$1" = xm ] || [ "$1" = xl ]; then + PATH="$dir/bin" + else + PATH="$dir/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + fi + command -v "$1" || : +} + +if [ -e $configfile ]; then + . $configfile || true +fi + +if [ "$TOOLSTACK" ]; then + cmd=$(check "$TOOLSTACK") + if [ "$cmd" ]; then + echo "$cmd" + else + echo "WARING: Can't find toolstack $TOOLSTACK, fallback to default!" >&2 + TOOLSTACK= + fi +fi + +if [ -z "$TOOLSTACK" ]; then + cmd_xm=$(check xm) + cmd_xl=$(check xl) + if [ "$cmd_xm" ]; then + echo "$cmd_xm" + elif [ "$cmd_xl" ]; then + echo "$cmd_xl" + else + echo "ERROR: Toolstack not specifed and nothing detected, bailing out!" >&2 + exit 127 + fi +fi diff --git a/scripts/xen-toolstack-wrapper b/scripts/xen-toolstack-wrapper new file mode 100755 index 0000000000..f76d2ef4b8 --- /dev/null +++ b/scripts/xen-toolstack-wrapper @@ -0,0 +1,11 @@ +#!/bin/sh -e + +COMMAND="$(basename $0)" +TOOLSTACK=$(. /usr/lib/xen-common/bin/xen-toolstack); RET=$?; [ $RET -eq 0 ] || exit $RET + +if [ "$(basename "$TOOLSTACK")" != "$COMMAND" ]; then + echo "ERROR: A different toolstack ($(basename "$TOOLSTACK")) have been selected!" >&2 + exit 1 +fi + +exec "$TOOLSTACK" "$@" diff --git a/scripts/xen-utils-wrapper b/scripts/xen-utils-wrapper new file mode 100755 index 0000000000..4d27a62d33 --- /dev/null +++ b/scripts/xen-utils-wrapper @@ -0,0 +1,6 @@ +#!/bin/sh -e + +COMMAND="$(basename $0)" +DIR=$(/usr/lib/xen-common/bin/xen-dir) + +exec "$DIR/bin/$COMMAND" "$@" diff --git a/scripts/xen-version b/scripts/xen-version new file mode 100755 index 0000000000..492070a43b --- /dev/null +++ b/scripts/xen-version @@ -0,0 +1,22 @@ +#!/bin/sh -e + +error() { + echo "ERROR: " "$@" >&2 + exit 1 +} + +if [ -e "/sys/hypervisor/type" ]; then + type="$(cat /sys/hypervisor/type)" + if [ "$type" = xen ]; then + DIR=/sys/hypervisor/version + VERSION="$(cat $DIR/major).$(cat $DIR/minor)" + elif [ -z "$type" ]; then + error "Can't read hypervisor type from sysfs!" + else + error "Hypervisor is not xen but '$type'!" + fi +else + error "Can't find hypervisor information in sysfs!" +fi + +echo "$VERSION" diff --git a/source/format b/source/format new file mode 100644 index 0000000000..163aaf8d82 --- /dev/null +++ b/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/templates/control.hypervisor.in b/templates/control.hypervisor.in new file mode 100644 index 0000000000..b27f748fe0 --- /dev/null +++ b/templates/control.hypervisor.in @@ -0,0 +1,15 @@ +Package: xen-hypervisor-@version@@localversion@ +Depends: ${misc:Depends} +Provides: xen-hypervisor, xen-hypervisor-@version@, xen-hypervisor@localversion@ +Recommends: xen-utils-@version@, xen-hypervisor-common +Description: Xen Hypervisor on @class@ + The hypervisor is the "core" for XEN itself. It gets booted by the boot loader + and controls cpu and memory, sharing them between your administrative domain + (Domain 0) and the virtual guest systems. + . + @desc@ + . + In order to boot a XEN system along with this package you also need a kernel + specifically crafted to work as the Domain 0, mediating hardware access for + XEN itself. + diff --git a/templates/control.main.in b/templates/control.main.in new file mode 100644 index 0000000000..bb16fef250 --- /dev/null +++ b/templates/control.main.in @@ -0,0 +1,72 @@ +Package: libxen-@version@ +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends} +Multi-Arch: same +Description: Public libs for Xen + This package contains the shared toolstack libraries for Xen. + +Package: libxenstore3.0 +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends} +Multi-Arch: same +Description: Xenstore communications library for Xen + This package contains the client library interface to XenStore. + +Package: libxen-dev +Section: libdevel +Multi-Arch: same +Depends: libxen-@version@ (= ${binary:Version}), libxenstore3.0 (= ${binary:Version}), ${misc:Depends} +Description: Public headers and libs for Xen + This package contains the public headers and static libraries for Xen. + . + The libxenlight library is intended as a common base for all Xen toolstack + developers. The libxlutil library contains additional helpers which may be + useful to toolstack developers. + . + The libxenstore library allows userspace processes to interact with the + XenStore database. XenStore is a shared database used for interdomain + communication of configuration and status information. It is accessible to all + domains running on the same Xen host. See http://wiki.xen.org/wiki/XenStore + for more information. + . + The libxenctrl, libxenguest and other remaining included libraries are + internal libraries intended for use by the Xen toolstack and are not intended + to be used directly. Toolstack authors should use libxenlight. + +Package: xenstore-utils +Section: admin +Depends: ${shlibs:Depends}, ${misc:Depends} +Conflicts: xen-utils-common (<= 3.1.0-1) +Replaces: xen-utils-common (<= 3.1.0-1) +Description: Xenstore command line utilities for Xen + This package contains command line utilities for interacting with XenStore. + . + XenStore is a shared database used for interdomain communication of + configuration and status information. It is accessible to all domains running + on the same Xen host. See http://wiki.xen.org/wiki/XenStore for more information. + . + In the common case these tools are used by the Xen toolstack running in + domain0 (or a driver domain) however they may also be used in a guest domain + to support local scripting which wants to communicate via XenStore. + +Package: xen-utils-common +Architecture: all +Depends: lsb-base, python, udev, xenstore-utils, ${misc:Depends} +Description: Xen administrative tools - common files + The userspace tools to manage a system virtualized through the Xen virtual + machine monitor. + . + This package is only required on the host system (Domain 0) and not on + the virtual guest systems (Domain U). + +Package: xen-hypervisor-common +Architecture: all +Depends: ${misc:Depends} +Replaces: xen-hypervisor-4.8-amd64, xen-hypervisor-4.8-arm64, xen-hypervisor-4.8-armhf +Description: Xen Hypervisor - common files + The configuration which arranges for an installed hypervisor to + be booted as default, with the right command line arguments passed + to both hypervisor and host (Domain 0) kernel. + . + This package is only required on the host system (Domain 0) and not on + the virtual guest systems (Domain U). diff --git a/templates/control.source.in b/templates/control.source.in new file mode 100644 index 0000000000..71d92c0b48 --- /dev/null +++ b/templates/control.source.in @@ -0,0 +1,28 @@ +Section: kernel +Priority: optional +Maintainer: Debian Xen Team +Uploaders: Guido Trotter , Bastian Blank , Ian Jackson +Build-Depends: + autotools-dev, + debhelper (>> 9), + dpkg-dev (>= 1.16.0~), + lsb-release, + python-dev, + bcc [i386 amd64], + gcc-multilib [i386 amd64], + e2fslibs-dev, + iasl, + seabios (>= 1.7.4-2~) [i386 amd64], + libaio-dev, + libfdt-dev [armhf arm64], + libglib2.0-dev, + liblzma-dev, + libncurses5-dev, + libpixman-1-dev, + libyajl-dev, + pkg-config, + uuid-dev, + zlib1g-dev, +Standards-Version: 3.9.4 +XS-Python-Version: current + diff --git a/templates/control.system.latest.in b/templates/control.system.latest.in new file mode 100644 index 0000000000..4130c80d23 --- /dev/null +++ b/templates/control.system.latest.in @@ -0,0 +1,8 @@ +Package: xen-system@localversion@ +Depends: xen-hypervisor-@version@@localversion@, xen-hypervisor-common, xen-utils-@version@, ${misc:Depends} +Provides: xen-system +Description: Xen System on @class@ (meta-package) + This package depends on the latest Xen hypervisor for use on @class@ and the Xen utils. + . + @desc@ + diff --git a/templates/control.utils.in b/templates/control.utils.in new file mode 100644 index 0000000000..6dcb41ade6 --- /dev/null +++ b/templates/control.utils.in @@ -0,0 +1,12 @@ +Package: xen-utils-@version@ +Depends: ${shlibs:Depends}, ${misc:Depends}, ${python:Depends}, xen-utils-common (>= ${source:Version}) +Recommends: bridge-utils, libc6-xen [i386], xen-hypervisor-@version@, qemu-system-x86, grub-xen-host [i386 amd64] +Suggests: qemu-utils [i386 amd64], seabios [i386 amd64], ovmf +Provides: xen-utils +Built-Using: ${misc:Built-Using} +Description: XEN administrative tools + The userspace tools to manage a system virtualized through the XEN virtual + machine monitor. + . + qemu-utils and seabios are neded for "Xen HVM" (amd64 and i386) + diff --git a/templates/libxen.bug/control b/templates/libxen.bug/control new file mode 100644 index 0000000000..3e21b39c90 --- /dev/null +++ b/templates/libxen.bug/control @@ -0,0 +1 @@ +Submit-As: src:xen diff --git a/templates/xen-hypervisor.bug/control b/templates/xen-hypervisor.bug/control new file mode 100644 index 0000000000..3e21b39c90 --- /dev/null +++ b/templates/xen-hypervisor.bug/control @@ -0,0 +1 @@ +Submit-As: src:xen diff --git a/templates/xen-hypervisor.postinst.in b/templates/xen-hypervisor.postinst.in new file mode 100644 index 0000000000..1540842eec --- /dev/null +++ b/templates/xen-hypervisor.postinst.in @@ -0,0 +1,23 @@ +#!/bin/bash + +set -e + +case "$1" in + configure) + if command -v update-grub > /dev/null && [ -d /boot/grub ]; then + update-grub || : + fi + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/templates/xen-hypervisor.postrm.in b/templates/xen-hypervisor.postrm.in new file mode 100644 index 0000000000..4833411ab6 --- /dev/null +++ b/templates/xen-hypervisor.postrm.in @@ -0,0 +1,23 @@ +#!/bin/bash + +set -e + +case "$1" in + remove) + if command -v update-grub > /dev/null && [ -d /boot/grub ]; then + update-grub || : + fi + ;; + + purge|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/templates/xen-utils.bug/control b/templates/xen-utils.bug/control new file mode 100644 index 0000000000..3e21b39c90 --- /dev/null +++ b/templates/xen-utils.bug/control @@ -0,0 +1 @@ +Submit-As: src:xen diff --git a/templates/xen-utils.lintian-overrides.in b/templates/xen-utils.lintian-overrides.in new file mode 100644 index 0000000000..dabce13989 --- /dev/null +++ b/templates/xen-utils.lintian-overrides.in @@ -0,0 +1 @@ +statically-linked-binary usr/lib/xen-@version@/boot/hvmloader diff --git a/templates/xen-utils.postinst.in b/templates/xen-utils.postinst.in new file mode 100644 index 0000000000..581327f09f --- /dev/null +++ b/templates/xen-utils.postinst.in @@ -0,0 +1,24 @@ +#!/bin/sh + +set -e + +case "$1" in + configure) + update-alternatives --remove xen-default /usr/lib/xen-@version@ + if [ -x "/etc/init.d/xen" ]; then + invoke-rc.d xen start || exit $? + fi + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/templates/xen-utils.prerm.in b/templates/xen-utils.prerm.in new file mode 100644 index 0000000000..1aa2cae65f --- /dev/null +++ b/templates/xen-utils.prerm.in @@ -0,0 +1,24 @@ +#!/bin/bash + +set -e + +case "$1" in + remove|upgrade) + update-alternatives --remove xen-default /usr/lib/xen-@version@ + if [ -x "/etc/init.d/xen" ]; then + invoke-rc.d xen stop || exit $? + fi + ;; + + deconfigure|failed-upgrade) + ;; + + *) + echo "prerm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/tree/xen-hypervisor-common/etc/default/grub.d/xen.cfg b/tree/xen-hypervisor-common/etc/default/grub.d/xen.cfg new file mode 100644 index 0000000000..b2d2f6ee93 --- /dev/null +++ b/tree/xen-hypervisor-common/etc/default/grub.d/xen.cfg @@ -0,0 +1,54 @@ +# +# Uncomment the following variable and set to 0 or 1 to avoid warning. +# +#XEN_OVERRIDE_GRUB_DEFAULT=0 + +echo "Including Xen overrides from /etc/default/grub.d/xen.cfg" + +# +# When running update-grub with the Xen hypervisor installed, there are +# some additional variables that can be used to pass options to the +# hypervisor or the dom0 kernel. + +# The following two are used to generate arguments for the hypervisor: +# +#GRUB_CMDLINE_XEN_DEFAULT="" +#GRUB_CMDLINE_XEN="" +# +# For example: +# +# dom0_mem=[M]:max=[M] +# Sets the amount of memory dom0 uses (max prevents balloning for more) +# com[12]=, +# Initialize a serial console from in the hypervisor (eg. 115200,8n1) +# Note that com1 would be ttyS0 in Linux. +# console=[, ...] +# Redirects Xen hypervisor console (eg. com1,vga) + +# +# The next two lines are used for creating kernel arguments for the dom0 +# kernel. This allows to have different options for the same kernel used +# natively or as dom0 kernel. +# +#GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT" +#GRUB_CMDLINE_LINUX_XEN_REPLACE="$GRUB_CMDLINE_LINUX" +# +# For example: +# +# earlyprintk=xenboot +# Allows to send early printk messages to the Xen hypervisor console +# console=hvc0 +# Redirects the Linux console to the hypervisor console + +# +# Make booting into Xen the default if not changed above. Finding the +# current string for it always has been a problem. +# +if [ "$XEN_OVERRIDE_GRUB_DEFAULT" = "" ]; then + echo "WARNING: GRUB_DEFAULT changed to boot into Xen by default!" + echo " Edit /etc/default/grub.d/xen.cfg to avoid this warning." + XEN_OVERRIDE_GRUB_DEFAULT=1 +fi +if [ "$XEN_OVERRIDE_GRUB_DEFAULT" = "1" ]; then + GRUB_DEFAULT="Debian GNU/Linux, with Xen hypervisor" +fi diff --git a/tree/xen-utils-common/etc/xen/xend-config.sxp b/tree/xen-utils-common/etc/xen/xend-config.sxp new file mode 100644 index 0000000000..93a24fd31d --- /dev/null +++ b/tree/xen-utils-common/etc/xen/xend-config.sxp @@ -0,0 +1,306 @@ +# -*- sh -*- + +# +# Xend configuration file. +# + +# This example configuration is appropriate for an installation that +# utilizes a bridged network configuration. Access to xend via http +# is disabled. + +# Commented out entries show the default for that entry, unless otherwise +# specified. + +#(logfile /var/log/xen/xend.log) +#(loglevel DEBUG) + +# Uncomment the line below. Set the value to flask, acm, or dummy to +# select a security module. + +#(xsm_module_name dummy) + +# The Xen-API server configuration. +# +# This value configures the ports, interfaces, and access controls for the +# Xen-API server. Each entry in the list starts with either unix, a port +# number, or an address:port pair. If this is "unix", then a UDP socket is +# opened, and this entry applies to that. If it is a port, then Xend will +# listen on all interfaces on that TCP port, and if it is an address:port +# pair, then Xend will listen on the specified port, using the interface with +# the specified address. +# +# The subsequent string configures the user-based access control for the +# listener in question. This can be one of "none" or "pam", indicating either +# that users should be allowed access unconditionally, or that the local +# Pluggable Authentication Modules configuration should be used. If this +# string is missing or empty, then "pam" is used. +# +# The final string gives the host-based access control for that listener. If +# this is missing or empty, then all connections are accepted. Otherwise, +# this should be a space-separated sequence of regular expressions; any host +# with a fully-qualified domain name or an IP address that matches one of +# these regular expressions will be accepted. +# +# Example: listen on TCP port 9363 on all interfaces, accepting connections +# only from machines in example.com or localhost, and allow access through +# the unix domain socket unconditionally: +# +# (xen-api-server ((9363 pam '^localhost$ example\\.com$') +# (unix none))) +# +# Optionally, the TCP Xen-API server can use SSL by specifying the private +# key and certificate location: +# +# (9367 pam '' xen-api.key xen-api.crt) +# +# Default: +# (xen-api-server ((unix))) + + +#(xend-http-server no) +#(xend-unix-server no) +#(xend-tcp-xmlrpc-server no) +#(xend-unix-xmlrpc-server yes) +#(xend-relocation-server no) +#(xend-relocation-ssl-server no) +#(xend-udev-event-server no) + +#(xend-unix-path /var/lib/xend/xend-socket) + + +# Address and port xend should use for the legacy TCP XMLRPC interface, +# if xend-tcp-xmlrpc-server is set. +#(xend-tcp-xmlrpc-server-address 'localhost') +#(xend-tcp-xmlrpc-server-port 8006) + +# SSL key and certificate to use for the legacy TCP XMLRPC interface. +# Setting these will mean that this port serves only SSL connections as +# opposed to plaintext ones. +#(xend-tcp-xmlrpc-server-ssl-key-file xmlrpc.key) +#(xend-tcp-xmlrpc-server-ssl-cert-file xmlrpc.crt) + + +# Port xend should use for the HTTP interface, if xend-http-server is set. +#(xend-port 8000) + +# Port xend should use for the relocation interface, if xend-relocation-server +# is set. +#(xend-relocation-port 8002) + +# Port xend should use for the ssl relocation interface, if +# xend-relocation-ssl-server is set. +#(xend-relocation-ssl-port 8003) + +# SSL key and certificate to use for the ssl relocation interface, if +# xend-relocation-ssl-server is set. +#(xend-relocation-server-ssl-key-file xmlrpc.key) +#(xend-relocation-server-ssl-cert-file xmlrpc.crt) + +# Whether to use ssl as default when relocating. +#(xend-relocation-ssl no) + +# Address xend should listen on for HTTP connections, if xend-http-server is +# set. +# Specifying 'localhost' prevents remote connections. +# Specifying the empty string '' (the default) allows all connections. +#(xend-address '') +#(xend-address localhost) + +# Address xend should listen on for relocation-socket connections, if +# xend-relocation-server is set. +# Meaning and default as for xend-address above. +# Also, interface name is allowed (e.g. eth0) there to get the +# relocation address to be bound on. +#(xend-relocation-address '') + +# The hosts allowed to talk to the relocation port. If this is empty (the +# default), then all connections are allowed (assuming that the connection +# arrives on a port and interface on which we are listening; see +# xend-relocation-port and xend-relocation-address above). Otherwise, this +# should be a space-separated sequence of regular expressions. Any host with +# a fully-qualified domain name or an IP address that matches one of these +# regular expressions will be accepted. +# +# For example: +# (xend-relocation-hosts-allow '^localhost$ ^.*\\.example\\.org$') +# +#(xend-relocation-hosts-allow '') + +# The limit (in kilobytes) on the size of the console buffer +#(console-limit 1024) + +## +# NOTE: +# Please read /usr/share/doc/xen-utils-common/README.Debian for Debian specific +# informations about the network setup. + +## +# To bridge network traffic, like this: +# +# dom0: ----------------- bridge -> real eth0 -> the network +# | +# domU: fake eth0 -> vifN.0 -+ +# +# use +# +# (network-script network-bridge) +# +# Your default ethernet device is used as the outgoing interface, by default. +# To use a different one (e.g. eth1) use +# +# (network-script 'network-bridge netdev=eth1') +# +# The bridge is named eth0, by default (yes, really!) +# + +# It is normally much better to create the bridge yourself in +# /etc/network/interfaces. network-bridge start does nothing if you +# already have a bridge, and network-bridge stop does nothing if the +# default bridge name (normally eth0) is not a bridge. See +# bridge-utils-interfaces(5) for full information on the syntax in +# /etc/network/interfaces, but you probably want something like this: +# iface xenbr0 inet static +# address [etc] +# netmask [etc] +# [etc] +# bridge_ports eth0 +# +# To have network-bridge create a differently-named bridge, use: +# (network-script 'network-bridge bridge=') +# +# It is possible to use the network-bridge script in more complicated +# scenarios, such as having two outgoing interfaces, with two bridges, and +# two fake interfaces per guest domain. To do things like this, write +# yourself a wrapper script, and call network-bridge from it, as appropriate. +# + +# The script used to control virtual interfaces. This can be overridden on a +# per-vif basis when creating a domain or a configuring a new vif. The +# vif-bridge script is designed for use with the network-bridge script, or +# similar configurations. +# +# If you have overridden the bridge name using +# (network-script 'network-bridge bridge=') then you may wish to do the +# same here. The bridge name can also be set when creating a domain or +# configuring a new vif, but a value specified here would act as a default. +# +# If you are using only one bridge, the vif-bridge script will discover that, +# so there is no need to specify it explicitly. The default is to use +# the bridge which is listed first in the output from brctl. +# +(vif-script vif-bridge) + + +## Use the following if network traffic is routed, as an alternative to the +# settings for bridged networking given above. +#(network-script network-route) +#(vif-script vif-route) + + +## Use the following if network traffic is routed with NAT, as an alternative +# to the settings for bridged networking given above. +#(network-script network-nat) +#(vif-script vif-nat) + +# dom0-min-mem is the lowest permissible memory level (in MB) for dom0. +# This is a minimum both for auto-ballooning (as enabled by +# enable-dom0-ballooning below) and for xm mem-set when applied to dom0. +(dom0-min-mem 196) + +# Whether to enable auto-ballooning of dom0 to allow domUs to be created. +# If enable-dom0-ballooning = no, dom0 will never balloon out. +(enable-dom0-ballooning yes) + +# 32-bit paravirtual domains can only consume physical +# memory below 168GB. On systems with memory beyond that address, +# they'll be confined to memory below 128GB. +# Using total_available_memory (in GB) to specify the amount of memory reserved +# in the memory pool exclusively for 32-bit paravirtual domains. +# Additionally you should use dom0_mem = <-Value> as a parameter in +# xen kernel to reserve the memory for 32-bit paravirtual domains, default +# is "0" (0GB). +(total_available_memory 0) + +# In SMP system, dom0 will use dom0-cpus # of CPUS +# If dom0-cpus = 0, dom0 will take all cpus available +(dom0-cpus 0) + +# Whether to enable core-dumps when domains crash. +#(enable-dump no) + +# The tool used for initiating virtual TPM migration +#(external-migration-tool '') + +# The interface for VNC servers to listen on. Defaults +# to 127.0.0.1 To restore old 'listen everywhere' behaviour +# set this to 0.0.0.0 +#(vnc-listen '127.0.0.1') + +# The default password for VNC console on HVM domain. +# Empty string is no authentication. +(vncpasswd '') + +# The VNC server can be told to negotiate a TLS session +# to encryption all traffic, and provide x509 cert to +# clients enabling them to verify server identity. The +# GTK-VNC widget, virt-viewer, virt-manager and VeNCrypt +# all support the VNC extension for TLS used in QEMU. The +# TightVNC/RealVNC/UltraVNC clients do not. +# +# To enable this create x509 certificates / keys in the +# directory ${XEN_CONFIG_DIR} + vnc +# +# ca-cert.pem - The CA certificate +# server-cert.pem - The Server certificate signed by the CA +# server-key.pem - The server private key +# +# and then uncomment this next line +# (vnc-tls 1) + +# The certificate dir can be pointed elsewhere.. +# +# (vnc-x509-cert-dir vnc) + +# The server can be told to request & validate an x509 +# certificate from the client. Only clients with a cert +# signed by the trusted CA will be able to connect. This +# is more secure the password auth alone. Passwd auth can +# used at the same time if desired. To enable client cert +# checking uncomment this: +# +# (vnc-x509-verify 1) + +# The default keymap to use for the VM's virtual keyboard +# when not specififed in VM's configuration +#(keymap 'en-us') + +# Script to run when the label of a resource has changed. +#(resource-label-change-script '') + +# Rotation count of qemu-dm log file. +#(qemu-dm-logrotate-count 10) + +# Path where persistent domain configuration is stored. +# Default is /var/lib/xend/domains/ +#(xend-domains-path /var/lib/xend/domains) + +# Number of seconds xend will wait for device creation and +# destruction +#(device-create-timeout 100) +#(device-destroy-timeout 100) + +# When assigning device to HVM guest, we use the strict check for HVM guest by +# default. (For PV guest, we use loose check automatically if necessary.) +# When we assign device to HVM guest, if we meet with the co-assignment +# issues or the ACS issue, we could try changing the option to 'no' -- however, +# we have to realize this may incur security issue and we can't make sure the +# device assignment could really work properly even after we do this. +#(pci-passthrough-strict-check yes) + +# If we have a very big scsi device configuration, start of xend is slow, +# because xend scans all the device paths to build its internal PSCSI device +# list. If we need only a few devices for assigning to a guest, we can reduce +# the scan to this device. Set list list of device paths in same syntax like in +# command lsscsi, e.g. ('16:0:0:0' '15:0') +# (pscsi-device-mask ('*')) + diff --git a/tree/xen-utils-common/etc/xen/xend-pci-permissive.sxp b/tree/xen-utils-common/etc/xen/xend-pci-permissive.sxp new file mode 100644 index 0000000000..1a3fb90a04 --- /dev/null +++ b/tree/xen-utils-common/etc/xen/xend-pci-permissive.sxp @@ -0,0 +1,27 @@ +############################################################################### +# Configuration file for granting quiry PCI devices full write access to their +# configuration space. This file should only be used when you are unable to +# determine the exact registers required by your device. Even so, it should +# be used only temporarily. +# +# SEND A MESSAGE TO xen-devel@lists.xensource.com IF YOU USE THIS FILE. +# +# Using this file should NOT be necessary. If you must use it to make some +# device work, send a message to the above list with as much information about +# your device as possible so the developers can make accomodations for it. +# Once developers make the necessary updates you can remove the corresponding +# entry for your device. +############################################################################### +# Entries are formated as follows: :[::] +# +# Example: Appending to an existing list +# +# (unconstrained_dev_ids +# ('XXXX:XXXX:XXXX:XXXX' # existing entry +# 'YYYY:YYYY:YYYY:YYYY' # new entry 1 +# 'ZZZZ:ZZZZ') # new entry 2 +# ) +############################################################################### +(unconstrained_dev_ids + #('0123:4567:89AB:CDEF') +) diff --git a/tree/xen-utils-common/etc/xen/xend-pci-quirks.sxp b/tree/xen-utils-common/etc/xen/xend-pci-quirks.sxp new file mode 100644 index 0000000000..6bce4b8a78 --- /dev/null +++ b/tree/xen-utils-common/etc/xen/xend-pci-quirks.sxp @@ -0,0 +1,96 @@ +############################################################################### +# Configuration file for quirky PCI devices that require write-access to +# parts of the configuration space. Use this file to specific PCI device +# IDs and the configuration space fields to which those devices must be +# able to write. +# +# Length is important, so be sure to match new entries with the +# lengths of comparable existing entries. +# +# Additions to this file take effect as soon as a new domain with a +# matching device is started. However, to remove a field that was +# previously applied to a device you must unbind the device from +# pciback. +############################################################################### +# This is a bogus entry to show how a new device would be added to the list +# +# (new_quirky_dev_name +# (pci_ids +# ('0123:4567:890A:BCEF') +# ) +# +# (pci_config_space_fields +# ('12345678:1:00000000') +# ) +# ) +############################################################################### + +(tg3 + (pci_ids + # Entries are formated as follows: + # :[::] + ('14e4:1644' # Broadcom Tigon3 5700 + '14e4:1645' # Broadcom Tigon3 5701 + '14e4:1646' # Broadcom Tigon3 5702 + '14e4:1647' # Broadcom Tigon3 5703 + '14e4:1648' # Broadcom Tigon3 5704 + '14e4:164d' # Broadcom Tigon3 5702FE + '14e4:1653' # Broadcom Tigon3 5705 + '14e4:1654' # Broadcom Tigon3 5705_2 + '14e4:165d' # Broadcom Tigon3 5705M + '14e4:165e' # Broadcom Tigon3 5705M_2 + '14e4:16a6' # Broadcom Tigon3 5702X + '14e4:16a7' # Broadcom Tigon3 5703X + '14e4:16a8' # Broadcom Tigon3 5704S + '14e4:16c6' # Broadcom Tigon3 5702A3 + '14e4:16c7' # Broadcom Tigon3 5703A3 + '14e4:1696' # Broadcom Tigon3 5782 + '14e4:169c' # Broadcom Tigon3 5788 + '14e4:169d' # Broadcom Tigon3 5789 + '14e4:170d' # Broadcom Tigon3 5901 + '14e4:1649' # Broadcom Tigon3 5704S_2 + '14e4:166e' # Broadcom Tigon3 5705F + '14e4:1658' # Broadcom Tigon3 5720 + '14e4:1659' # Broadcom Tigon3 5721 + '14e4:1676' # Broadcom Tigon3 5750 + '14e4:1677' # Broadcom Tigon3 5751 + '14e4:167c' # Broadcom Tigon3 5750M + '14e4:167d' # Broadcom Tigon3 5751M + '14e4:167e' # Broadcom Tigon3 5751F + '14e4:1600' # Broadcom Tigon3 5752 + '14e4:1601' # Broadcom Tigon3 5752M + '14e4:16f7' # Broadcom Tigon3 5753 + '14e4:16fd' # Broadcom Tigon3 5753M + '14e4:16fe' # Broadcom Tigon3 5753F + '14e4:1668' # Broadcom Tigon3 5714 + '14e4:1678' # Broadcom Tigon3 5715 + '14e4:166a' # Broadcom Tigon3 5780 + '14e4:166b' # Broadcom Tigon3 5780S + '14e4:16dd' # Broadcom Tigon3 5781 + '1148:4400' # Syskonnect 9DXX + '1148:4500' # Syskonnect 9MXX + '173b:03e8' # Altima AC1000 + '173b:03e9' # Altima AC1001 + '173b:03eb' # Altima AC1003 + '173b:03ea' # Altima AC9100 + '106b:1645') # Apple Tigon3 + ) + + (pci_config_space_fields + # Entries are formated as follows: + # :: + # size is measured in bytes (1,2,4 are valid sizes) + # mask is currently unused; use all zero's + ('00000078:4:00000000' # TG3PCI_REG_BASE_ADDR + '0000007c:4:00000000' # TG3PCI_MEM_WIN_BASE_ADDR + '00000080:4:00000000' # TG3PCI_REG_DATA + '00000084:4:00000000' # TG3PCI_MEM_WIN_DATA + '00000090:4:00000000' # TG3PCI_MISC_LOCAL_CTRL + '00000068:4:00000000' # TG3PCI_MISC_HOST_CTRL + '0000009C:4:00000000' # TG3PCI_STD_RING_PROD_IDX + TG3_64BIT_REG_LOW + '00000098:4:00000000' # TG3PCI_STD_RING_PROD_IDX + TG3_64BIT_REG_HIGH + '000000a4:4:00000000' # TG3PCI_RCV_RET_RING_CON_IDX + TG3_64BIT_REG_LOW + '000000a0:4:00000000' # TG3PCI_RCV_RET_RING_CON_IDX + TG3_64BIT_REG_HIGH + '00000070:4:00000000') # TG3PCI_PCISTATE + ) +) diff --git a/tree/xen-utils-common/usr/share/xen-utils-common/default.xen b/tree/xen-utils-common/usr/share/xen-utils-common/default.xen new file mode 100644 index 0000000000..87a35f3a11 --- /dev/null +++ b/tree/xen-utils-common/usr/share/xen-utils-common/default.xen @@ -0,0 +1,9 @@ +# Configuration for Xen system +# ---------------------------- + +# There exists several tool stacks to configure a Xen system. +# xl: This is the new toolstack using libxenlight/libxl (default) +# xm: Was the old toolstack (xend) which is no longer supported! +# +# Attention: You need to reboot after changing this! +TOOLSTACK= diff --git a/xen-hypervisor-4.11-amd64.postinst b/xen-hypervisor-4.11-amd64.postinst new file mode 100644 index 0000000000..1540842eec --- /dev/null +++ b/xen-hypervisor-4.11-amd64.postinst @@ -0,0 +1,23 @@ +#!/bin/bash + +set -e + +case "$1" in + configure) + if command -v update-grub > /dev/null && [ -d /boot/grub ]; then + update-grub || : + fi + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/xen-hypervisor-4.11-amd64.postrm b/xen-hypervisor-4.11-amd64.postrm new file mode 100644 index 0000000000..4833411ab6 --- /dev/null +++ b/xen-hypervisor-4.11-amd64.postrm @@ -0,0 +1,23 @@ +#!/bin/bash + +set -e + +case "$1" in + remove) + if command -v update-grub > /dev/null && [ -d /boot/grub ]; then + update-grub || : + fi + ;; + + purge|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/xen-hypervisor-4.11-arm64.postinst b/xen-hypervisor-4.11-arm64.postinst new file mode 100644 index 0000000000..1540842eec --- /dev/null +++ b/xen-hypervisor-4.11-arm64.postinst @@ -0,0 +1,23 @@ +#!/bin/bash + +set -e + +case "$1" in + configure) + if command -v update-grub > /dev/null && [ -d /boot/grub ]; then + update-grub || : + fi + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/xen-hypervisor-4.11-arm64.postrm b/xen-hypervisor-4.11-arm64.postrm new file mode 100644 index 0000000000..4833411ab6 --- /dev/null +++ b/xen-hypervisor-4.11-arm64.postrm @@ -0,0 +1,23 @@ +#!/bin/bash + +set -e + +case "$1" in + remove) + if command -v update-grub > /dev/null && [ -d /boot/grub ]; then + update-grub || : + fi + ;; + + purge|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/xen-hypervisor-4.11-armhf.postinst b/xen-hypervisor-4.11-armhf.postinst new file mode 100644 index 0000000000..1540842eec --- /dev/null +++ b/xen-hypervisor-4.11-armhf.postinst @@ -0,0 +1,23 @@ +#!/bin/bash + +set -e + +case "$1" in + configure) + if command -v update-grub > /dev/null && [ -d /boot/grub ]; then + update-grub || : + fi + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/xen-hypervisor-4.11-armhf.postrm b/xen-hypervisor-4.11-armhf.postrm new file mode 100644 index 0000000000..4833411ab6 --- /dev/null +++ b/xen-hypervisor-4.11-armhf.postrm @@ -0,0 +1,23 @@ +#!/bin/bash + +set -e + +case "$1" in + remove) + if command -v update-grub > /dev/null && [ -d /boot/grub ]; then + update-grub || : + fi + ;; + + purge|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/xen-hypervisor-common.install b/xen-hypervisor-common.install new file mode 100644 index 0000000000..f8cfab91e2 --- /dev/null +++ b/xen-hypervisor-common.install @@ -0,0 +1 @@ +../../tree/xen-hypervisor-common/* / diff --git a/xen-utils-4.11.lintian-overrides b/xen-utils-4.11.lintian-overrides new file mode 100644 index 0000000000..452adc0e0b --- /dev/null +++ b/xen-utils-4.11.lintian-overrides @@ -0,0 +1 @@ +statically-linked-binary usr/lib/xen-4.11/boot/hvmloader diff --git a/xen-utils-4.11.postinst b/xen-utils-4.11.postinst new file mode 100644 index 0000000000..9bf84f988c --- /dev/null +++ b/xen-utils-4.11.postinst @@ -0,0 +1,24 @@ +#!/bin/sh + +set -e + +case "$1" in + configure) + update-alternatives --remove xen-default /usr/lib/xen-4.11 + if [ -x "/etc/init.d/xen" ]; then + invoke-rc.d xen start || exit $? + fi + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/xen-utils-4.11.prerm b/xen-utils-4.11.prerm new file mode 100644 index 0000000000..123a59bf9b --- /dev/null +++ b/xen-utils-4.11.prerm @@ -0,0 +1,24 @@ +#!/bin/bash + +set -e + +case "$1" in + remove|upgrade) + update-alternatives --remove xen-default /usr/lib/xen-4.11 + if [ -x "/etc/init.d/xen" ]; then + invoke-rc.d xen stop || exit $? + fi + ;; + + deconfigure|failed-upgrade) + ;; + + *) + echo "prerm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/xen-utils-common.README.Debian b/xen-utils-common.README.Debian new file mode 100644 index 0000000000..873a9d3fc9 --- /dev/null +++ b/xen-utils-common.README.Debian @@ -0,0 +1,29 @@ +Xen for Debian +============== + +Config behaviour +---------------- + +The Debian packages changes the behaviour of some config options. + +The options "kernel", "initrd" and "loader" searches in the Xen private boot +directory (/usr/lib/xen-$version/boot) first. "bootloader" and "device_model" +also searches the Xen private bin directory (/usr/lib/xen-$version/bin). This +means that the following entries will properly find anything: + loader = 'hvmloader' + bootloader = 'pygrub' + +Network setup +------------- + +The Debian package of Xen don't change the network setup in any way. This +differs from the upstream version, which overwrites the main network card +(eth0) with a bridge setup and may break the network at this point.. + +To setup a bridge please follow the instructions in the manpage for +bridge-utils-interfaces(5). + +You can also change the /etc/xen/xend-config.sxp file and re-enable the Xen +included network setup by adding + (network-script network-bridge) +to the file. But please note that this may or may not work. diff --git a/xen-utils-common.dirs b/xen-utils-common.dirs new file mode 100644 index 0000000000..c745c087a3 --- /dev/null +++ b/xen-utils-common.dirs @@ -0,0 +1 @@ +var/lib/xen diff --git a/xen-utils-common.examples b/xen-utils-common.examples new file mode 100644 index 0000000000..50cee55177 --- /dev/null +++ b/xen-utils-common.examples @@ -0,0 +1,2 @@ +debian/tmp/etc/xen/cpupool* +debian/tmp/etc/xen/xm* diff --git a/xen-utils-common.install b/xen-utils-common.install new file mode 100644 index 0000000000..d919badd3a --- /dev/null +++ b/xen-utils-common.install @@ -0,0 +1,5 @@ +etc/xen/scripts +etc/xen/xl* +usr/lib/xen-common +usr/sbin +../../tree/xen-utils-common/* / diff --git a/xen-utils-common.postinst b/xen-utils-common.postinst new file mode 100644 index 0000000000..f719731aff --- /dev/null +++ b/xen-utils-common.postinst @@ -0,0 +1,23 @@ +#!/bin/sh + +set -e + +case "$1" in +configure) + install -d -m 2750 -g adm /var/log/xen + ;; + +abort-upgrade|abort-remove|abort-deconfigure) + ;; + +*) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +dpkg-maintscript-helper mv_conffile /etc/init.d/xend /etc/init.d/xen 4.1.2-4~ -- "$@" + +#DEBHELPER# + +exit 0 diff --git a/xen-utils-common.postrm b/xen-utils-common.postrm new file mode 100644 index 0000000000..48b57ead0c --- /dev/null +++ b/xen-utils-common.postrm @@ -0,0 +1,23 @@ +#!/bin/sh + +set -e + +case "$1" in +purge) + rmdir --ignore-fail-on-non-empty /var/log/xen + ;; + +remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + +*) + echo "postrm called with unknown argument \`$1'" >&2 + exit + ;; +esac + +dpkg-maintscript-helper mv_conffile /etc/init.d/xend /etc/init.d/xen 4.1.2-4~ -- "$@" + +#DEBHELPER# + +exit 0 diff --git a/xen-utils-common.preinst b/xen-utils-common.preinst new file mode 100644 index 0000000000..5f9c729374 --- /dev/null +++ b/xen-utils-common.preinst @@ -0,0 +1,23 @@ +#!/bin/sh + +set -e + +case "$1" in +install|upgrade) + ;; + +abort-upgrade) + ;; + +*) + echo "preinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +dpkg-maintscript-helper mv_conffile /etc/init.d/xend /etc/init.d/xen 4.1.2-4~ -- "$@" +update-rc.d -f xend remove >/dev/null + +#DEBHELPER# + +exit 0 diff --git a/xen-utils-common.ucf b/xen-utils-common.ucf new file mode 100644 index 0000000000..b32b91d1d9 --- /dev/null +++ b/xen-utils-common.ucf @@ -0,0 +1 @@ +/usr/share/xen-utils-common/default.xen /etc/default/xen diff --git a/xen-utils-common.xen.init b/xen-utils-common.xen.init new file mode 100644 index 0000000000..3411c15b0f --- /dev/null +++ b/xen-utils-common.xen.init @@ -0,0 +1,378 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: xen xend +# Required-Start: $syslog $remote_fs +# Required-Stop: $syslog $remote_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Xen daemons +# Description: Xen daemons +### END INIT INFO + +. /lib/init/vars.sh +. /lib/lsb/init-functions + +# Default variables +XENSTORED_DIR="/var/run/xenstored" + +[ -r /etc/default/xen ] && . /etc/default/xen +[ -r /etc/default/xend ] && . /etc/default/xend + +PATH=/sbin:/bin:/usr/sbin:/usr/bin +DESC="Xen daemons" + +ROOT=$(/usr/lib/xen-common/bin/xen-dir 2>/dev/null) +if [ $? -ne 0 ]; then + log_warning_msg "Not running within Xen or no compatible utils" + exit 0 +fi +TOOLSTACK=$(/usr/lib/xen-common/bin/xen-toolstack 2>/dev/null) +if [ $? -ne 0 ]; then + log_warning_msg "No usable Xen toolstack selected" + exit 0 +fi + +[ -e "$ROOT"/bin/xend ] && XEND="$ROOT"/bin/xend +XENCONSOLED="$ROOT"/bin/xenconsoled +XENCONSOLED_PIDFILE="/var/run/xenconsoled.pid" +XENSTORED="$ROOT"/bin/xenstored +XENSTORED_PIDFILE="/var/run/xenstore.pid" +QEMU=/usr/bin/qemu-system-i386 +QEMU_PIDFILE="/var/run/qemu-dom0.pid" +QEMU_ARGS="-xen-domid 0 -xen-attach -name dom0 -nographic -M xenpv -daemonize -monitor /dev/null -serial /dev/null -parallel /dev/null" + +modules_setup() +{ + modprobe xenfs 2>/dev/null + modprobe xen-evtchn 2>/dev/null + modprobe xen-gntdev 2>/dev/null +} + +xenfs_setup() +{ + [ -e "/proc/xen/capabilities" ] && return 0 + log_progress_msg "xenfs" + [ -d "/proc/xen" ] || return 1 + mount -t xenfs xenfs /proc/xen || return 1 + return 0 +} + +capability_check() +{ + [ -e "/proc/xen/capabilities" ] || return 1 + grep -q "control_d" /proc/xen/capabilities || return 1 + return 0 +} + +env_setup() +{ + [ -d /run/xen ] && return 0 + + mkdir -m 700 /run/xen + [ -x /sbin/restorecon ] && /sbin/restorecon /run/xen +} + +xend_start() +{ + if [ -z "$XEND" ] || [ "$(basename "$TOOLSTACK")" != xm ]; then + return 0 + fi + + log_progress_msg "xend" + xend_start_real + return $? +} + +xend_stop() +{ + if [ -z "$XEND" ] || [ "$(basename "$TOOLSTACK")" != xm ]; then + return 0 + fi + + log_progress_msg "xend" + xend_stop_real + return $? +} + +xend_restart() +{ + if [ -z "$XEND" ] || [ "$(basename "$TOOLSTACK")" != xm ]; then + return 0 + fi + + log_progress_msg "xend" + xend_stop_real + case "$?" in + 0|1) + xend_start_real + case "$?" in + 0) ;; + *) return 2 ;; + esac + ;; + *) return 2 ;; + esac + return 0 +} + +xend_start_real() +{ + $XEND status && return 1 + $XEND start || return 2 + + i=0 + while [ $i -lt 10 ]; do + $XEND status && return 0 || true + i=$(($i + 1)) + sleep 1 + done + return 2 +} + +xend_stop_real() +{ + log_progress_msg "xend" + $XEND status || return 0 + $XEND stop || return 1 +} + +xenconsoled_start() +{ + log_progress_msg "xenconsoled" + xenconsoled_start_real + return $? +} + +xenconsoled_stop() +{ + log_progress_msg "xenconsoled" + xenconsoled_stop_real + return $? +} + +xenconsoled_restart() +{ + log_progress_msg "xenconsoled" + xenconsoled_stop_real + case "$?" in + 0|1) + xenconsoled_start_real + case "$?" in + 0) ;; + *) return 2 ;; + esac + ;; + *) return 2 ;; + esac + return 0 +} + +xenconsoled_start_real() +{ + start-stop-daemon --start --quiet --pidfile "$XENCONSOLED_PIDFILE" --exec "$XENCONSOLED" --test > /dev/null \ + || return 1 + start-stop-daemon --start --quiet --pidfile "$XENCONSOLED_PIDFILE" --exec "$XENCONSOLED" -- \ + $XENCONSOLED_ARGS --pid-file="$XENCONSOLED_PIDFILE" \ + || return 2 +} + +xenconsoled_stop_real() +{ + start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile "$XENCONSOLED_PIDFILE" --name xenconsoled + RETVAL="$?" + [ "$RETVAL" = 2 ] && return 2 + start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec "$XENCONSOLED" + [ "$?" = 2 ] && return 2 + rm -f $XENCONSOLED_PIDFILE + return "$RETVAL" +} + +qemu_start() +{ + [ -x $QEMU ] || return 0 + log_progress_msg "qemu" + qemu_start_real + return $? +} + +qemu_stop() +{ + [ -x $QEMU ] || return 0 + log_progress_msg "qemu" + qemu_stop_real + return $? +} + +qemu_restart() +{ + [ -x $QEMU ] || return 0 + log_progress_msg "qemu" + qemu_stop_real + case "$?" in + 0|1) + qemu_start_real + case "$?" in + 0) ;; + *) return 2 ;; + esac + ;; + *) return 2 ;; + esac + return 0 +} + +qemu_start_real() +{ + start-stop-daemon --start --quiet --pidfile "$QEMU_PIDFILE" --exec "$QEMU" --test > /dev/null \ + || return 1 + start-stop-daemon --start --quiet --pidfile "$QEMU_PIDFILE" --exec "$QEMU" -- \ + $QEMU_ARGS -pidfile "$QEMU_PIDFILE" \ + || return 2 +} + +qemu_stop_real() +{ + start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile "$QEMU_PIDFILE" --exec "$QEMU" + RETVAL="$?" + [ "$RETVAL" = 2 ] && return 2 + rm -f $QEMU_PIDFILE + return "$RETVAL" +} + + +xenstored_start() +{ + log_progress_msg "xenstored" + start-stop-daemon --start --quiet --pidfile "$XENSTORED_PIDFILE" --exec "$XENSTORED" --test > /dev/null \ + || return 1 + [ -d "$XENSTORED_DIR" ] || mkdir -p "$XENSTORED_DIR" + [ -x /sbin/restorecon ] && /sbin/restorecon "$XENSTORED_DIR" + export XENSTORED_ROOTDIR="$XENSTORED_DIR" + start-stop-daemon --start --quiet --pidfile "$XENSTORED_PIDFILE" --exec "$XENSTORED" -- \ + $XENSTORED_ARGS --pid-file="$XENSTORED_PIDFILE" \ + || return 2 + + # Wait for xenstored to actually come up, timing out after 30 seconds + local time=0 + local timeout=30 + while [ $time -lt $timeout ] && ! `xenstore-read -s / >/dev/null 2>&1` ; do + time=$(( $time+1 )) + sleep 1 + done + + # Exit if we timed out + if ! [ $time -lt $timeout ] ; then + return 2 + fi +} + +init_dom0() +{ + log_progress_msg "init-dom0" + if [ -e $ROOT/bin/xen-init-dom0 ] ; then + $ROOT/bin/xen-init-dom0 > /dev/null + else + xenstore-write "/local/domain/0/name" "Domain-0" + xenstore-write "/local/domain/0/domid" "0" + fi +} + +case "$1" in + start) + log_daemon_msg "Starting $DESC" + modules_setup + xenfs_setup + case "$?" in + 0) ;; + *) log_end_msg 1; exit ;; + esac + capability_check + case "$?" in + 0) ;; + *) log_end_msg 255; exit ;; + esac + env_setup + xenstored_start + case "$?" in + 0|1) ;; + *) log_end_msg 1; exit ;; + esac + xenconsoled_start + case "$?" in + 0|1) ;; + *) log_end_msg 1; exit ;; + esac + xend_start + case "$?" in + 0|1) ;; + *) log_end_msg 1; exit ;; + esac + init_dom0 + case "$?" in + 0|1) ;; + *) log_end_msg 1; exit ;; + esac + qemu_start + case "$?" in + 0|1) ;; + *) log_end_msg 1; exit ;; + esac + log_end_msg 0 + ;; + stop) + capability_check + case "$?" in + 0) ;; + *) exit ;; + esac + log_daemon_msg "Stopping $DESC" + ret=0 + qemu_stop + case "$?" in + 0|1) ;; + *) ret=1 ;; + esac + xend_stop + case "$?" in + 0|1) ;; + *) ret=1 ;; + esac + xenconsoled_stop + case "$?" in + 0|1) ;; + *) ret=1 ;; + esac + log_end_msg $ret + ;; + restart|force-reload) + capability_check + case "$?" in + 0) ;; + *) exit ;; + esac + log_daemon_msg "Restarting $DESC" + ret=0 + qemu_restart + case "$?" in + 0|1) ;; + *) ret=1 ;; + esac + xend_restart + case "$?" in + 0|1) ;; + *) ret=1 ;; + esac + xenconsoled_restart + case "$?" in + 0|1) ;; + *) ret=1 ;; + esac + log_end_msg $ret + ;; + *) + echo "Usage: $0 {start|stop|restart|force-reload}" >&2 + exit 3 + ;; +esac + +exit 0 diff --git a/xen-utils-common.xend.default b/xen-utils-common.xend.default new file mode 100644 index 0000000000..589da356ad --- /dev/null +++ b/xen-utils-common.xend.default @@ -0,0 +1,2 @@ +XENCONSOLED_ARGS= +XENSTORED_ARGS= diff --git a/xen-utils-common.xendomains.default b/xen-utils-common.xendomains.default new file mode 100644 index 0000000000..34aeb12502 --- /dev/null +++ b/xen-utils-common.xendomains.default @@ -0,0 +1,60 @@ +# The xendomains script can send SysRq requests to domains on shutdown. +# If you don't want to MIGRATE, SAVE, or SHUTDOWN, this may be a possibility +# to do a quick and dirty shutdown ("s e i u o") or at least sync the disks +# of the domains ("s"). +# +# XENDOMAINS_SYSRQ= + +# Set this to a non-empty string if you want to migrate virtual machines +# on shutdown. The string will be passed to the xm migrate DOMID command +# as is: It should contain the target IP address of the physical machine +# to migrate to and optionally parameters like --live. Leave empty if +# you don't want to try virtual machine relocation on shutdown. +# If migration succeeds, neither SAVE nor SHUTDOWN will be executed for +# that domain. +# +# XENDOMAINS_MIGRATE= + +# Directory to save running domains to when the system (dom0) is +# shut down. Will also be used to restore domains from if # XENDOMAINS_RESTORE +# is set (see below). Leave empty to disable domain saving on shutdown +# (e.g. because you rather shut domains down). +# If domain saving does succeed, SHUTDOWN will not be executed. +# +XENDOMAINS_SAVE=/var/lib/xen/save + +# This variable determines whether saved domains from XENDOMAINS_SAVE +# will be restored on system startup. +# +XENDOMAINS_RESTORE=true + +# This variable sets the directory where domains configurations +# are stored that should be started on system startup automatically. +# Leave empty if you don't want to start domains automatically +# (or just don't place any xen domain config files in that dir). +# Note that the script tries to be clever if both RESTORE and AUTO are +# set: It will first restore saved domains and then only start domains +# in AUTO which are not running yet. +# Note that the name matching is somewhat fuzzy. +# +XENDOMAINS_AUTO=/etc/xen/auto + +# On xendomains stop, a number of xm commands (xm migrate, save, shutdown, +# shutdown --all) may be executed. In the worst case, these commands may +# stall forever, which will prevent a successful shutdown of the machine. +# If this variable is non-zero, the script will set up a watchdog timer +# for every of these xm commands and time it out after the number of seconds +# specified by this variable. +# Note that SHUTDOWN_ALL will not be called if no virtual machines or only +# zombies are still running, so you don't need to enable this timeout just +# for the zombie case. +# The setting should be large enough to make sure that migrate/save/shutdown +# can succeed. If you do live migrations, keep in mind that live migration +# of a 1GB machine over Gigabit ethernet may actually take something like +# 100s (assuming that live migration uses 10% of the network # bandwidth). +# Depending on the virtual machine, a shutdown may also require a significant +# amount of time. So better setup this variable to a huge number and hope the +# watchdog never fires. +# +XENDOMAINS_STOP_MAXWAIT=300 + diff --git a/xen-utils-common.xendomains.init b/xen-utils-common.xendomains.init new file mode 100644 index 0000000000..e1164b21bb --- /dev/null +++ b/xen-utils-common.xendomains.init @@ -0,0 +1,228 @@ +#!/bin/bash +### BEGIN INIT INFO +# Provides: xendomains +# Required-Start: $syslog $remote_fs xen +# Required-Stop: $syslog $remote_fs xen +# Should-Start: drbd iscsi openvswitch-switch +# Should-Stop: drbd iscsi openvswitch-switch +# X-Start-Before: corosync heartbeat libvirtd +# X-Stop-After: corosync heartbeat libvirtd +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Start/stop secondary xen domains +# Description: Start / stop domains automatically when domain 0 +# boots / shuts down. +### END INIT INFO + +. /lib/init/vars.sh +. /lib/lsb/init-functions + +xen list &> /dev/null +if test $? -ne 0 +then + exit 0; +fi + +TOOLSTACK=$(/usr/lib/xen-common/bin/xen-toolstack 2>/dev/null) +if [ $? -ne 0 ]; then + log_warning_msg "No usable Xen toolstack selected" + exit 0 +fi +if [ "$(basename "$TOOLSTACK")" != xm ] && [ "$(basename "$TOOLSTACK")" != xl ]; then + exit 0 +fi + +if ! [ -e /proc/xen/privcmd ]; then + exit 0 +fi + +[ -r /etc/default/xendomains ] && . /etc/default/xendomains + +shopt -s nullglob + +check_config_name() +{ + /usr/lib/xen-common/bin/xen-init-name "$1" 2>/dev/null +} + +check_running() +{ + xen domid "$1" > /dev/null 2>&1 + return $? +} + +timeout_coproc() +{ + local TIMEOUT=$1 + shift + + coproc "$@" 2>&1 1>/dev/null + + local COPROC_OUT + exec {COPROC_OUT}<&"${COPROC[0]}" + local PID="$COPROC_PID" + + for no in $(seq 0 $TIMEOUT); do + if [ -z "$COPROC_PID" ]; then break; fi + sleep 1 + log_action_cont_msg + done + + kill -INT "$COPROC_PID" >/dev/null 2>&1 + wait $PID + local rc=$? + log_action_end_msg $rc + + [ $rc -gt 0 ] && cat <&$COPROC_OUT + exec <&$COPROC_OUT- +} + +timeout_domain() +{ + name="$1" + TIMEOUT="$2" + for no in $(seq 0 $TIMEOUT); do + if ! check_running "$name"; then return 0; fi + sleep 1 + log_action_cont_msg + done + return 1 +} + +do_start_restore() +{ + [ -n "$XENDOMAINS_SAVE" ] || return + [ -d "$XENDOMAINS_SAVE" ] || return + [ -n "$XENDOMAINS_RESTORE" ] || return + + for file in $XENDOMAINS_SAVE/*; do + if [ -f $file ] ; then + name="${file##*/}" + log_action_begin_msg "Restoring Xen domain $name (from $file)" + + out=$(xen restore "$file" 2>&1 1>/dev/null) + case "$?" in + 0) + rm "$file" + domains[$name]='started' + log_action_end_msg 0 + ;; + *) + domains[$name]='failed' + log_action_end_msg 1 + echo "$out" + ;; + esac + fi + done +} + +do_start_auto() +{ + [ -n "$XENDOMAINS_AUTO" ] || return + [ -d "$XENDOMAINS_AUTO" ] || return + + for file in $XENDOMAINS_AUTO/*; do + name="$(check_config_name $file)" + + if [ "${domains[$name]}" = started ]; then + : + elif check_running "$name"; then + log_action_msg "Xen domain $name already running" + else + log_action_begin_msg "Starting Xen domain $name (from $file)" + + if [ "${domains[$name]}" = failed ]; then + log_action_end_msg 1 "restore failed" + else + out=$(xen create --quiet --defconfig "$file" 2>&1 1>/dev/null) + case "$?" in + 0) + log_action_end_msg 0 + ;; + *) + log_action_end_msg 1 + echo "$out" + ;; + esac + fi + fi + done +} + +do_start() +{ + declare -A domains + + do_start_restore + do_start_auto +} + +do_stop_migrate() +{ + [ -n "$XENDOMAINS_MIGRATE" ] || return + + while read id name rest; do + log_action_begin_msg "Migrating Xen domain $name ($id)" + (timeout_coproc "$XENDOMAINS_STOP_MAXWAIT" xen migrate $id $XENDOMAINS_MIGRATE) + done < <(/usr/lib/xen-common/bin/xen-init-list) +} + +do_stop_save() +{ + [ -n "$XENDOMAINS_SAVE" ] || return + [ -d "$XENDOMAINS_SAVE" ] || mkdir -m 0700 -p "$XENDOMAINS_SAVE" + + while read id name rest; do + log_action_begin_msg "Saving Xen domain $name ($id)" + (timeout_coproc "$XENDOMAINS_STOP_MAXWAIT" xen save $id $XENDOMAINS_SAVE/$name) + done < <(/usr/lib/xen-common/bin/xen-init-list) +} + +do_stop_shutdown() +{ + while read id name rest; do + log_action_begin_msg "Shutting down Xen domain $name ($id)" + xen shutdown $id 2>&1 1>/dev/null + log_action_end_msg $? + done < <(/usr/lib/xen-common/bin/xen-init-list) + while read id name rest; do + log_action_begin_msg "Waiting for Xen domain $name ($id) to shut down" + timeout_domain "$name" "$XENDOMAINS_STOP_MAXWAIT" + log_action_end_msg $? + done < <(/usr/lib/xen-common/bin/xen-init-list) +} + +do_stop() +{ + do_stop_migrate + do_stop_save + do_stop_shutdown +} + +case "$1" in + start) + do_start + ;; + + stop) + do_stop + ;; + + restart) + do_stop + do_start + ;; + + reload|force-reload) + do_stop + do_start + ;; + + *) + echo "Usage: $0 {start|stop|restart|reload|force-reload}" + exit 3 + ;; +esac + +exit 0 diff --git a/xen-utils.NEWS b/xen-utils.NEWS new file mode 100644 index 0000000000..607c164352 --- /dev/null +++ b/xen-utils.NEWS @@ -0,0 +1,8 @@ +xen-3.0 (3.4.0-1) UNRELEASED; urgency=low + + This version does not longer ship the ioemu part, aka the patched qemu. + So it does not support + * full virtualized domains and + * virtual console support for paravirtualized domains. + + -- Bastian Blank Sat, 18 Jul 2009 15:05:31 +0200 diff --git a/xen-utils.README.Debian b/xen-utils.README.Debian new file mode 100644 index 0000000000..33bc454698 --- /dev/null +++ b/xen-utils.README.Debian @@ -0,0 +1,53 @@ +Xen for Debian +============== + +Config behaviour +---------------- + +The Debian packages changes the behaviour of some config options. + +The options "kernel", "initrd" and "loader" searches in the Xen private boot +directory (/usr/lib/xen-$version/boot) first. "bootloader" and "device_model" +also searches the Xen private bin directory (/usr/lib/xen-$version/bin). This +means that the following entries will properly find anything: + loader = 'hvmloader' + bootloader = 'pygrub' + +Network setup +------------- + +The Debian package of Xen don't change the network setup in any way. This +differs from the upstream version, which overwrites the main network card +(eth0) with a bridge setup and may break the network at this point.. + +To setup a bridge please follow the instructions in the manpage for +bridge-utils-interfaces(5). + +You can also change the /etc/xen/xend-config.sxp file and re-enable the Xen +included network setup by adding + (network-script network-bridge) +to the file. But please note that this may or may not work. + +Loop devices +------------ + +If you plan hosting virtual domains with file backed block devices (ie. the +ones xen-tools creates by default) be careful about two issues: + +1. Maximum number of loop devices + By default the loop driver supports a maximum of 8 loop devices. Of + course since every Xen domain uses at least two (one for the data and one + for the swap) this number is absolutely insufficient. You should increase + it by adding a file named local-loop in /etc/modprobe.d containing the + string "options loop max_loop=128", if the loop driver is compiled as a + module, or by appending the string max_loop=128 to your kernel parameters + if the driver is in-kernel. Of course you can increase or decrease the + number 128 as you see fit. + +2. Driver loading (only if loop is compiled as a module) + Normally the loop driver gets loaded when the first loop device is + accessed. When using udev, though, the loop devices get created only + after the driver gets loaded. This means that Xen will fail if the loop + driver is not already loaded when it tries to start a file-backed virtual + domain. To fix this just add "loop" in your /etc/modules file, thus + forcing it to be loaded at boot time. diff --git a/xenstore-utils.install b/xenstore-utils.install new file mode 100644 index 0000000000..199b491755 --- /dev/null +++ b/xenstore-utils.install @@ -0,0 +1 @@ +usr/bin/xenstore-* -- 2.30.2